45

我已经加入了 ARC 的潮流。在过去,我会像这样声明我的委托属性:

@property(assign) id<MyProtocol> delegate;

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

@property(weak) id<MyProtocol> delegate;

不是这样。在 .m 中的 @synthesize 语句中出现编译错误

*语义问题:__weak 属性 'delegate' 的现有 ivar 'delegate' 必须是 __weak*

我已经宣布它很弱!另外,我如何将实现协议的类传递给弱引用的属性。我是否必须将其包装在那些奇怪的 obj_unretained 调用之一中?

对此的任何帮助将不胜感激。

4

1 回答 1

65

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

@interface Foo : NSObject {
    id delegate;
}

@property (weak) id delegate;

错误的意思是它必须看起来像这样:

@interface Foo : NSObject {
    __weak id delegate;
}

@property (weak) id delegate;

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

于 2011-06-30T02:01:05.760 回答