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

Mik*_*e S 45 iphone ios ios5 automatic-ref-counting

我加入了ARC的行列.在过去,我会将我的委托属性声明为:

@property(assign) id<MyProtocol> delegate;
Run Code Online (Sandbox Code Playgroud)

所以我想我会在ARC下做到这一点:

@property(weak) id<MyProtocol> delegate;
Run Code Online (Sandbox Code Playgroud)

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

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

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

任何有关这方面的帮助将非常感谢.

tc.*_*tc. 65

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

@interface Foo : NSObject {
    id delegate;
}

@property (weak) id delegate;
Run Code Online (Sandbox Code Playgroud)

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

@interface Foo : NSObject {
    __weak id delegate;
}

@property (weak) id delegate;
Run Code Online (Sandbox Code Playgroud)

如果财产声称很弱,那么价值最终存储的伊娃也必须是弱的.

  • 或者你可以完全删除ivar并让`@ synthesize`行也为你处理.:) (43认同)
  • @Dylan:你需要两个下划线. (4认同)
  • 你的假设是正确的.还有DaveDelong - 你告诉我1.5年来我一直在用标题和@property声明编写带有ivars的iOS,当我合成时我不需要ivar吗?!这太棒了哈哈!谢谢! (3认同)
  • @Mike不觉得不好.在过去的一年中,能够在架构和耦合器中进行这种聚合.不过现在已经完成了. (2认同)