Iphone 如何使用具有自动引用计数的委托
我已经加入了ARC的行列。在过去,我会像这样声明我的委托属性:Iphone 如何使用具有自动引用计数的委托,iphone,ios,ios5,automatic-ref-counting,Iphone,Ios,Ios5,Automatic Ref Counting,我已经加入了ARC的行列。在过去,我会像这样声明我的委托属性: @property(assign) id<MyProtocol> delegate; @interface Foo : NSObject { id delegate; } @property (weak) id delegate; @interface Foo : NSObject { __weak id delegate; } @property (weak) id delegate; @pr
@property(assign) id<MyProtocol> delegate;
@interface Foo : NSObject {
id delegate;
}
@property (weak) id delegate;
@interface Foo : NSObject {
__weak id delegate;
}
@property (weak) id delegate;
@property(assign)id委托;
所以我想我会在ARC下这样做:
@property(weak) id<MyProtocol> delegate;
@属性(弱)id委托;
不是这样。在.m中的@synthesis语句上,我有一个compile错误:
*语义问题:弱属性“delegate”的现有ivar“delegate”必须是弱的*
不过我已经宣布它很弱了!还有,如何将实现协议的类传递给弱引用属性。我必须用一个奇怪的obj_未回复电话来包装它吗
在此方面的任何帮助都将不胜感激 “ivar”表示“实例变量”,您尚未显示该变量。我打赌它看起来像这样:
@property(assign) id<MyProtocol> delegate;
@interface Foo : NSObject {
id delegate;
}
@property (weak) id delegate;
@interface Foo : NSObject {
__weak id delegate;
}
@property (weak) id delegate;
错误的意思是它必须是这样的:
@property(assign) id<MyProtocol> delegate;
@interface Foo : NSObject {
id delegate;
}
@property (weak) id delegate;
@interface Foo : NSObject {
__weak id delegate;
}
@property (weak) id delegate;
如果属性声明为弱属性,则最终存储该值的ivar也必须是弱属性。或者您可以完全删除ivar,并让
@synthesis
行为您处理该属性。:)你的假设是正确的。还有DaveDelong——你是说我已经写了1.5年的iOS,头上有ivar,还有@property声明,我合成的时候不需要ivar?!这太棒了,哈哈!谢谢@迈克,别难过。在过去的一年里,这种能力在建筑和耦合器之间不断增强。不过,它现在已经完成了。但是,如果未声明ivar,它将在Xcode中不可见。(错误存档)。@Dylan:你需要两个下划线。弧可以公开讨论。iOS 5特定的API不能。这意味着iOS 5支持GC Obj-C,这可能是机密的,除非苹果公司宣布(我不知道他们是否有;我一直忙得跟不上)。