[a retain]
在对象a
中 [b retain]
导致循环引用。
如果发生了什么
[a release]
是通过对象b中的某个方法调用的吗?
答案 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]
。如果没有其他任何东西拥有b
,b
也将被取消分配。
有时保留周期是可以的。您只需要确保在适当的时间打破循环。例如,一个对象可以拥有一次性使用NSTimer
,并且计时器可以拥有该对象(作为计时器target
),从而创建一个保留周期。当计时器触发时,对象应该释放计时器,打破保留周期。如果对象在计时器触发之前取消了计时器(通过发送它invalidate
),则计时器会释放该对象,同时也会中断保留周期。