我曾经将所有委托属性声明为
@property (assign) id<FooDelegate> delegate;
我的印象是所有的分配属性现在都应该是弱指针,这是正确的吗? 如果我试图声明为:
@property (weak) id<FooDelegate> delegate;
我在尝试@synthesize时遇到错误(不支持自动生成的弱属性)。
在这种情况下,最佳做法是什么?
答案 0 :(得分:23)
Xcode 4 重构&gt; 转换为Objective-C ARC 转换:
@interface XYZ : NSObject
{
id delegate;
}
@property (assign) id delegate;
...
@synthesize delegate;
成:
@interface XYZ : NSObject
{
id __unsafe_unretained delegate;
}
@property (unsafe_unretained) id delegate;
...
@synthesize delegate;
如果我没记错的话,WWDC 2011视频中也提到了ARC。
答案 1 :(得分:22)
使用__unsafe_unretained
代替weak
用于针对iOS 4和5的ARC项目。唯一的区别是weak
在取消分配时nils指针,并且仅在iOS 5中支持。
您的其他问题已在Why are Objective-C delegates usually given the property assign instead of retain?中解答。