使用 ARC 的 Objective-C 代表
Posted
技术标签:
【中文标题】使用 ARC 的 Objective-C 代表【英文标题】:Objective-C Delegates with ARC 【发布时间】:2011-11-07 20:04:47 【问题描述】:我正在编写一个具有对委托对象的回调的类,但遇到 ARC 问题。
例如我有符合 ProtocolA 的 ObjectA(委托)和 ObjectB,它是回调委托的对象。我将 ObjectA 作为 @property 存储在 ObjectB 中。
在这种情况下,哪些变量应该是强引用,哪些应该是弱引用?我需要避免将“self”从 ObjectA 传递到 ObjectB 以设置委托导致从强指针转换为弱指针的情况。
【问题讨论】:
【参考方案1】:为避免循环引用,请将 ObjectB 的委托保存为弱引用。因为 ObjectA “拥有” ObjectB,所以不应释放 ObjectA,而 ObjectB 有对它的引用。所以写:
@property (weak, nonatomic) id <ObjectBDelegate> delegate;
【讨论】:
谢谢。这很好用——我犯了一个错误,因为“@property (weak, nonatomic) id委托属性通常应该是弱的。将消息传递给委托的对象并不“拥有”委托,实际上它通常是相反的。
【讨论】:
以上是关于使用 ARC 的 Objective-C 代表的主要内容,如果未能解决你的问题,请参考以下文章
在 Objective-C 中使用 ARC 时 AutoRelease 是多余的吗?