使用ARC的Objective-C代理

12

我正在编写一个具有委托对象回调的类,但在进行 ARC 时遇到了问题。

例如,我有一个符合 ProtocolA 的 ObjectA(委托),以及一个调用委托的对象 ObjectB。我将 ObjectA 存储为 ObjectB 中的 @property。

在这种情况下,哪些变量应该是 strong 引用,哪些应该是 weak 引用?我需要避免从 ObjectA 将 'self' 传递给 ObjectB 来设置委托的情况,导致从 strong 指针转换为 weak 指针。

2个回答

22
为了避免循环引用,将ObjectB的委托保存为弱引用。因为ObjectA“拥有”ObjectB,所以ObjectA不应该被释放,而ObjectB对它有一个引用。因此写成:
为了避免循环引用,将ObjectB的委托保存为弱引用。因为ObjectA“拥有”ObjectB,所以ObjectA不应该被释放,而ObjectB对它有一个引用。因此写成:
    @property (weak, nonatomic) id <ObjectBDelegate> delegate;

谢谢。这很好用 - 我犯了一个错误,即使用了“@property (weak, nonatomic) id<ObjectBDelegate> *delegate;”,并得到了一些非常不友好的错误消息,让我认为这是一个强/弱引用问题! - Tom W
伙计,那个*在里面藏得真好。 - Tudor
我也有一个指针...坦率地说,这是一个有趣的解决方案。 - BonanzaDriver

8

委托属性通常应该是弱引用。向委托发送消息的对象不“拥有”委托,事实上通常是相反的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接