Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何使用具有自动引用计数的委托_Iphone_Ios_Ios5_Automatic Ref Counting - Fatal编程技术网

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

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

我已经加入了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;
@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,这可能是机密的,除非苹果公司宣布(我不知道他们是否有;我一直忙得跟不上)。