删除dealloc上对象的所有观察信息

时间:2013-10-05 16:59:51

标签: ios objective-c cocoa-touch

我遇到了这个错误:

  

“类的Actor的实例0x156ad8d0在键值时被释放   观察员仍在注册。观察信息被泄露,   甚至可能会错误地附加到其他一些物体上。设置一个   NSKVODeallocateBreak上的断点在调试器中停止。   这是当前的观察信息:“

是否有一种有效的方法来取消注册接收器正在观察的所有对象,以及取消注册所有正在观察它的对象?我可以找到取消注册事物的唯一方法是通过removeObserverForKeyPath - 这将要求我跟踪所有注册的对象和密钥路径,这可能会很麻烦。

1 个答案:

答案 0 :(得分:1)

使用removeObserverForKeyPath:作为@Kevin建议。

然而,你真的应该在重新分配之前删除观察者。在释放期间,实例的状态很可能是不一致的。特别是在处理类层次结构时。因此,在解除分配期间让观察者活跃通常是一些非常难以解决的问题的根源。