Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Recommended way to declare delegate properties with ARC

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?

like image 837
cfischer Avatar asked Oct 13 '11 12:10

cfischer


2 Answers

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.

like image 107
djromero Avatar answered Oct 06 '22 12:10

djromero


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?.

like image 35
Jano Avatar answered Oct 06 '22 14:10

Jano