建议使用ARC声明委托属性的方法

时间:2011-10-13 12:04:26

标签: objective-c cocoa-touch delegates automatic-ref-counting

我曾经将所有委托属性声明为

@property (assign) id<FooDelegate> delegate;

我的印象是所有的分配属性现在都应该是弱指针,这是正确的吗? 如果我试图声明为:

@property (weak) id<FooDelegate> delegate;

我在尝试@synthesize时遇到错误(不支持自动生成的弱属性)。

在这种情况下,最佳做法是什么?

2 个答案:

答案 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?中解答。