如何使用具有自动引用计数的委托

时间:2011-06-30 01:53:43

标签: iphone ios ios5 automatic-ref-counting

我跳过了ARC的潮流。在过去,我会将我的委托属性声明为:

@property(assign) id<MyProtocol> delegate;

所以我想我会在ARC下这样做:

@property(weak) id<MyProtocol> delegate;

不是这样。在.m中的@synthesize语句中,我有一个编译错误

*语义问题:__ weak属性'委托'的现有ivar'委托'必须是__weak *

我已经声明它虽然很弱!另外,我如何将实现协议的类传递给弱引用的属性。我是否必须将其包裹在其中一个奇怪的obj_unretained调用中?

对此的任何帮助将非常感谢。

1 个答案:

答案 0 :(得分:65)

“ivar”表示“实例变量”,您尚未显示。我打赌它看起来像这样:

@interface Foo : NSObject {
    id delegate;
}

@property (weak) id delegate;

错误的含义是它必须如下所示:

@interface Foo : NSObject {
    __weak id delegate;
}

@property (weak) id delegate;

如果财产声称属弱,那么该值最终存储的ivar也必须是弱的。