【问题标题】:Remove all observation info for object on dealloc在 dealloc 上删除对象的所有观察信息
【发布时间】:2013-10-05 16:59:50
【问题描述】:

我遇到了这个错误:

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

有没有一种有效的方法来注销接收者正在观察的所有对象,以及注销所有正在观察它的对象?我能找到取消注册的唯一方法是通过 removeObserverForKeyPath - 这需要我跟踪所有已注册的对象和键路径,这可能会变得很麻烦。

【问题讨论】:

  • 没有神奇的功能,只有removeObserverForKeyPath

标签: ios objective-c cocoa-touch


【解决方案1】:

按照@Kevin 的建议使用removeObserverForKeyPath:

然而,你真的应该在释放之前移除观察者。在解除分配期间,实例的状态很可能会不一致。尤其是在处理类层次结构时。因此,在释放期间让观察者处于活动状态通常是一些非常不稳定、难以修复的错误的根源。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-07
    • 1970-01-01
    相关资源
    最近更新 更多