发布呼吁循环引用

时间:2014-09-26 18:30:37

标签: ios memory-management

对象b中的

[a retain]

在对象a

[b retain]  导致循环引用。 如果发生了什么  [a release]

是通过对象b中的某个方法调用的吗?

2 个答案:

答案 0 :(得分:0)

你已经在这种情况下创建了一个保留周期,应该避免这种情况,因为这是一种内存泄漏的形式。

这是一篇很好的写作: http://www.cocoawithlove.com/2009/07/rules-to-avoid-retain-cycles.html

我强烈建议您重新设计课程以避免通知要求,

答案 1 :(得分:0)

如果b中的某个方法调用[a release],则保留周期会中断。当没有其他任何东西拥有a时,a将被取消分配。据推测,在a dealloc中,它[b release]。如果没有其他任何东西拥有bb也将被取消分配。

有时保留周期是可以的。您只需要确保在适当的时间打破循环。例如,一个对象可以拥有一次性使用NSTimer,并且计时器可以拥有该对象(作为计时器target),从而创建一个保留周期。当计时器触发时,对象应该释放计时器,打破保留周期。如果对象在计时器触发之前取消了计时器(通过发送它invalidate),则计时器会释放该对象,同时也会中断保留周期。