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

标签 ios objective-c cocoa-touch

我一直遇到这个错误:

"An instance 0x156ad8d0 of class Actor was deallocated while key value observers were still registered with it. Observation info was leaked, and may even become mistakenly attached to some other object. Set a breakpoint on NSKVODeallocateBreak to stop here in the debugger. Here's the current observation info:"

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

最佳答案

按照@Kevin 的建议使用removeObserverForKeyPath:

但是,您真的应该在解除分配之前移除观察者。在释放期间,实例的状态很可能会不一致。特别是在处理类层次结构时。因此,在释放期间让观察者处于事件状态通常是一些非常不稳定、难以修复的错误的来源。

关于ios - 删除 dealloc 上对象的所有观察信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19200330/

相关文章:

ios - Swift 2.1 - 在委托(delegate)方法调用上展开 Optional 时意外发现 nil

ios - 通过 iOS 11 中的应用程序组共享用户默认值不起作用

objective-c - 暂停 Objective-C 运行时循环以获取用户输入

ios - 减慢 UITableView 中的行插入动画

iphone - 从子 UIViewController 到父 UIViewController 的通信

iphone - 如何在UIView中应用变换?

ios - 是否建议将Game Center Player ID用作应用程序 bundle 中的文件夹名称?

iphone - 如何删除所有 performSelector :withObject:afterDelay:?

ios - 自产类没有像我想象的那样工作,为什么?

ios - UIDatePicker间隔10分钟?