为什么委托引用很弱?

时间:2013-07-02 18:27:46

标签: ios objective-c delegates

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

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

那为什么代表们很弱? 是的,我知道之前有人问过。是的,我花时间试图理解这一点。 但我似乎并不理解这一点。

谢谢。

2 个答案:

答案 0 :(得分:0)

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

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

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

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

答案 1 :(得分:0)

我认为当B类为A类提供委托时,A类将为该委托分配一个强委托,现在如果B类也使该委托强,这将导致内存泄漏。由于这两个类都拥有对该委托的强引用,因此只有在某些部分使其变弱并且其他部分内存不足时才会被释放。

Good Link

相关问题