Recommended way to declare delegate properties with ARC

筅森魡賤 提交于 2019-11-27 19:09:55

问题


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?


回答1:


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




回答2:


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.



来源:https://stackoverflow.com/questions/7753841/recommended-way-to-declare-delegate-properties-with-arc

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!