为什么委托引用是弱引用?

13 浏览
0 Comments

为什么委托引用是弱引用?

我在一个UINavigationController中有两个UIViewControllers。

viewControllerA是viewControllerB的代理。

显然,viewControllerA没有viewControllerB的引用。

viewControllerB有viewControllerA的引用,因为vcA是vcB的代理。

有人告诉我代理引用应该是weak。

在我的情况下,我不认为这是正确的。

如果UINavigationController决定放弃vcA,vcB的代理将为nil。

但是,如果对vcA的引用是strong的,vcB仍然会引用它。

那么为什么代理应该是weak的呢?

是的,我知道以前有人问过这个问题。是的,我花了时间试图理解这个问题。

但是我似乎不明白其中任何一点。

谢谢。

0
0 Comments

为什么委托引用应该是弱引用?原因是为了避免循环引用。一个典型的例子是,当委托是强引用时,会产生一个循环引用。由于原始对象引用了_myViewController,而_myViewController又引用了原始对象,所以会产生一个循环引用。解决方法是将委托引用设置为弱引用或者在非ARC代码中设置为assign。虽然有时候可能会有一些特殊情况需要强引用委托,比如NSURLConnection,因为它需要在其短暂的生命周期内临时保留对象以完成实际工作。然而,通常情况下,委托引用应该是弱引用。

0
0 Comments

为什么委托引用应该使用弱引用?

当Class B为Class A提供一个委托时,Class A会将这个委托赋值为强引用。如果Class B也将这个委托设置为强引用,这将导致内存泄漏。因为两个类都持有一个对这个委托的强引用,除非有人将其设置为弱引用,否则它将无法释放,直到其中一个类被释放。

解决方法是将委托引用设置为弱引用,以避免内存泄漏的问题。

参考链接:http://dannysu.com/2012/07/30/automatic-reference-counting-on-ios/

0