您好!
我尝试在我的应用中使用委托。我的项目使用 ARC
例如,我有协议X和两个使用它的对象。 在对象 B 中,我为对象 A 创建了一个实例,并设置了委托自我(A.delegate = self) 在运行时,我调用一个方法callBack(此时我的委托对象是 B )。之后,他们都执行 -showResult 方法。
在什么时候形成圆形参考?我知道这是说明符强大的问题,但我不明白它发生的时间,以及如何跟踪它。
谢谢!
答案 0 :(得分:14)
如果两个对象都保持彼此强引用(也就是说,它们相互保留),那么您可能会拥有所谓的“保留周期”。这两个对象都不会被释放,因为另一个对象有一个强引用(保留它),所以它永远不会放弃它的引用(释放)另一个对象。
这种情况在委托中很常见,其中一个对象(称为A)创建另一个对象(B)并将其自身设置为B的委托。如果A具有对B的强引用,因此B将不会被释放,并且B也具有对A的强引用,则您具有参考周期。为了避免这种情况,对象通常不保留或保留对其代理人的强引用。让B提到A弱而不是强,问题消失了。
答案 1 :(得分:1)
看起来你在B中保留了对A的强烈引用。要么使它成为弱引用,要么 - 这是常见做法 - 使委托成为弱引用。在后一种情况下,您应确保在取消分配B之前将A delegate
设置为nil
。