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

我不明白为什么用弱指针定义委托是正确的:


@property (nonatomic,weak) id delegate;

我不明白为什么没有必要保留对委托的引用...我不希望释放用作委托的对象...因此,我宁愿使用强引用而不是弱!


在许多情况下,委托是将要创建类实例的对象,在这种情况下,创建弱引用将是避免保留周期的好方法...但是如果我选择完全不同的对象作为委托,该怎么办? ?


我搜索了有关堆栈溢出的其他问题,但找不到任何可以帮助我完全理解这种情况的问题。


Qyouu
浏览 569回答 3
3回答

慕村9548890

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

米琪卡哇伊

这是为了避免保留周期。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。
打开App,查看更多内容
随时随地看视频慕课网APP