我不明白为什么用弱指针定义委托是正确的:@property (nonatomic,weak) id delegate;我不明白为什么没有必要保留对委托的引用...我不希望释放用作委托的对象...因此,我宁愿使用强引用而不是弱!在许多情况下,委托是将要创建类实例的对象,在这种情况下,创建弱引用将是避免保留周期的好方法...但是如果我选择完全不同的对象作为委托,该怎么办? ?我搜索了有关堆栈溢出的其他问题,但找不到任何可以帮助我完全理解这种情况的问题。
3 回答
慕村9548890
TA贡献1884条经验 获得超4个赞
对象弱保留其委托的原因是为了避免保留周期。想象一下以下情形:对象a
创建b
并保留它,然后将其自身设置为 b
的委托。a
由其所有者释放,留下包含a
和的保留周期b
。这实际上是非常普遍的情况。考虑一个拥有一个视图并充当该视图的委托的视图控制器。在这种情况下,视图不应保留控制器-作为适当的MVC体系结构的主旨并防止保留周期。
米琪卡哇伊
TA贡献1998条经验 获得超6个赞
这是为了避免保留周期。Apple提供了有关高级内存管理的信息性指南,说明了这种情况以及如何最好地对其进行处理。在ARC中,它们现在称为强参考周期,在《过渡到ARC发行说明》中对此进行了说明。
以前,您需要像这样为委托定义属性,
@property (nonatomic, assign) id delegate;
但是在ARC中,您可以这样定义它,
@property (nonatomic, unsafe_unretained) id delegate;
或者,例如,如果您有一个名为的协议<MyObjectDelegate>,则还可以通过这种方式定义委托,
@property (nonatomic, weak) id <MyObjectDelegate> delegate;
换句话说,在ARC中,如果您有协议,则可以声明一个委托weak。否则,unsafe_unretained。
- 3 回答
- 0 关注
- 608 浏览
添加回答
举报
0/150
提交
取消