I used to declare all delegate properties as
@property (assign) id<FooDelegate> delegate;
I was under the impression that all assign properties should now be weak pointers, is this correct? If I try to declare as:
@property (weak) id<FooDelegate> delegate;
I get an error while trying to @synthesize (autogenerated weak properties are not supported).
What's the best practice in this case?
Xcode 4 Refactor > Convert to Objective-C ARC transforms:
@interface XYZ : NSObject { id delegate; } @property (assign) id delegate; ... @synthesize delegate;
into:
@interface XYZ : NSObject { id __unsafe_unretained delegate; } @property (unsafe_unretained) id delegate; ... @synthesize delegate;
If I remember correctly it is also mentioned in WWDC 2011 video about ARC.
Use __unsafe_unretained
instead weak
for ARC projects targeting iOS 4 and 5. The only difference is that weak
nils the pointer when deallocated, and it's only supported in iOS 5.
Your other question is answered in Why are Objective-C delegates usually given the property assign instead of retain?.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With