我跳过了ARC的潮流。在过去,我会将我的委托属性声明为:
@property(assign) id<MyProtocol> delegate;
所以我想我会在ARC下这样做:
@property(weak) id<MyProtocol> delegate;
不是这样。在.m中的@synthesize语句中,我有一个编译错误:
*语义问题:__ weak属性'委托'的现有ivar'委托'必须是__weak *
我已经声明它虽然很弱!另外,我如何将实现协议的类传递给弱引用的属性。我是否必须将其包裹在其中一个奇怪的obj_unretained调用中?
对此的任何帮助将非常感谢。
答案 0 :(得分:65)
“ivar”表示“实例变量”,您尚未显示。我打赌它看起来像这样:
@interface Foo : NSObject {
id delegate;
}
@property (weak) id delegate;
错误的含义是它必须如下所示:
@interface Foo : NSObject {
__weak id delegate;
}
@property (weak) id delegate;
如果财产声称属弱,那么该值最终存储的ivar也必须是弱的。