为了账号安全,请及时绑定邮箱和手机立即绑定

为什么使用弱指针进行委派?

为什么使用弱指针进行委派?

Qyouu 2019-10-17 10:18:52
我不明白为什么用弱指针定义委托是正确的:@property (nonatomic,weak) id delegate;我不明白为什么没有必要保留对委托的引用...我不希望释放用作委托的对象...因此,我宁愿使用强引用而不是弱!在许多情况下,委托是将要创建类实例的对象,在这种情况下,创建弱引用将是避免保留周期的好方法...但是如果我选择完全不同的对象作为委托,该怎么办? ?我搜索了有关堆栈溢出的其他问题,但找不到任何可以帮助我完全理解这种情况的问题。
查看完整描述

3 回答

?
慕村9548890

TA贡献1884条经验 获得超4个赞

对象弱保留其委托的原因是为了避免保留周期。想象一下以下情形:对象a创建b并保留它,然后将其自身设置为 b的委托。a由其所有者释放,留下包含a和的保留周期b。这实际上是非常普遍的情况。考虑一个拥有一个视图并充当该视图的委托的视图控制器。在这种情况下,视图不应保留控制器-作为适当的MVC体系结构的主旨并防止保留周期。


查看完整回答
反对 回复 2019-10-17
?
米琪卡哇伊

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。


查看完整回答
反对 回复 2019-10-17
  • 3 回答
  • 0 关注
  • 564 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信