-1

我在 UINavigationController 中有两个 UIViewController。
viewControllerA 是 viewControllerB 的委托。
显然,viewControllerA 没有对 viewControllerB 的引用。
viewControllerB 具有对 viewControllerA 的引用,因为 vcA 是 vcB 的委托。

有人告诉我,代表引用应该很弱。
就我而言,我认为这不是真的。
如果 UINavigationController 决定放弃 vcA,则 vcB 的委托将为零。
但是,如果对 vcA 的引用很强,则 vcB 仍然会引用它。

那为什么代表很弱呢?
是的,我知道以前有人问过。是的,我花了很多时间试图理解这一点。然而我似乎不明白这些。

谢谢你。

4

2 回答 2

0

在我看来,代表应该是弱的(或在非 ARC 代码中分配)以避免循环。

我们在许多样本中看到的一个典型案例是:

_myViewController = [[MyViewController alloc] init];
_myViewController.delegate = self;

如果委托是强的,这会产生一个循环,因为 _myViewController 被原始对象引用,而原始对象又被 _myViewController 引用。

于 2013-07-02T18:33:38.153 回答
0

我认为当 B 类为 A 类提供一个委托时。A 类会为这个委托分配一个强委托,现在如果 B 类也使这个委托为强,这将导致内存泄漏。由于两个类都对这个委托有很强的引用,所以它不能被释放,直到一些使它变弱而另一种耗尽内存。

好链接

于 2013-07-02T18:54:07.610 回答