gpt4 book ai didi

objective-c - objective-c 中的 ARC 循环引用使用委托(delegate)

转载 作者:太空狗 更新时间:2023-10-30 03:47:36 32 4
gpt4 key购买 nike

您好!

我尝试在我的应用中使用委托(delegate)。我的项目使用 ARC

enter image description here

例如,我有协议(protocol) X 和两个使用它的对象。在对象 B 中,我为对象 A 创建了一个实例并设置了 delegate self (A.delegate = self)在运行时,我调用一个方法 callBack(此时我的委托(delegate)对象是 B)。之后他们都执行-showResult方法。

循环引用是在什么时候形成的?我知道这是说明符 strong 的问题,但我不明白它发生的时间以及如何跟踪它。

谢谢!

最佳答案

如果两个对象都保持对彼此的强引用(也就是说,它们相互保留),您可能会遇到所谓的“保留循环”。两个对象都不会被释放,因为另一个对象对它有强引用(保留它),因此它永远不会放弃对另一个对象的引用(释放)。

这种情况在委托(delegate)中很常见,其中一个对象(称为 A)创建另一个对象(B)并将自己设置为 B 的委托(delegate)。如果 A 对 B 有强引用,这样 B 就不会被释放,并且 B 也对 A 有强引用,那么你就有了引用循环。为了避免这种情况,对象通常不保留或保留对其委托(delegate)的强引用。将 B 对 A 的引用设为弱而不是强,问题就会消失。

关于objective-c - objective-c 中的 ARC 循环引用使用委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9313967/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com