ARC and weak IBOutlet properties

Jacque picture Jacque · Oct 15, 2011 · Viewed 18k times · Source

I just updated a project to make use of ARC with the Xcode 4.2 built-in conversion tool. Unfortunately there is a weird bug appearing that I don't understand and didn't find anything about. I have a document class with a property declaration:

@property (weak) IBOutlet WebView *webView;

In the implementation file I have a @synthesize statement:

@synthesize webView=_webView;

When I try to compile it, it fails and tells me:

error: @synthesize of 'weak' property is only allowed in ARC or GC mode

Of course the project is tagged to compile with ARC. I would highly appreciate any help to understand what I'm doing wrong and why.

Edit: Was late yesterday. So here is a more complete compile-log:

[...] -fobjc-arc -Wno-trigraphs -fpascal-strings -O0 -Wmissing-prototypes -Wreturn-type -Wparentheses -Wswitch -Wno-unused-parameter -Wunused-variable -Wunused-value -Wshorten-64-to-32 -DDEBUG=1 -isysroot /Developer/SDKs/MacOSX10.7.sdk -fasm-blocks -mmacosx-version-min=10.7 -gdwarf-2 -Wno-sign-conversion "-DIBOutlet=attribute((iboutlet))" "-DIBOutletCollection(ClassName)=attribute((iboutletcollection(ClassName)))" "-DIBAction=void)attribute((ibaction)" -iquote [...]/Build/Intermediates/[...].build/Debug/[...].build/[...]-generated-files.hmap -I[...]/Build/Intermediates/[...].build/Debug/[...].build/[...]-own-target-headers.hmap -I[...]/Build/Intermediates/[...].build/Debug/[...].build/[...]-all-target-headers.hmap -iquote [...]/Build/Intermediates/[...].build/Debug/[...].build/[...]-project-headers.hmap -I[...]/Build/Products/Debug/include -I[...]/Build/Intermediates/[...].build/Debug/[...].build/DerivedSources/x86_64 -I[...]/Build/Intermediates/[...].build/Debug/[...].build/DerivedSources -F[...]/Build/Products/Debug -fno-objc-arc [...]

It seems the compiler-settings for ARC are turned on in the beginning and turned off again later in the arguments list. To be honest: I don't know where to remove such weird settings and how it came to this. The only solution I would come up with now, would be to start the complete project over from a blank and new one and import all the class files from scratch.

If someone knows an easier way, I would appreciate very much.

PS: I do have all build-settings concerning the ARC set to YES.

Answer

PeterParker picture PeterParker · Dec 28, 2012

In only ARC we have to use weak property and in without ARC we have to use unsafe_unretained it is same means for ARC we have to use

@property (weak) IBOutlet WebView *webView;

and for without ARC

@property(unsafe_unretained) IBoulet WebView *webView;