我正在尝试在我的一门课程中使用键值观察。我在 init 方法中注册了观察者并在 dealloc 中删除/取消注册它们,但是根据我的调试打印,我得到了以下错误,这似乎发生在我的 dealloc 方法被调用之前。
TekkPoint 类的实例 0x583870 正在被释放,而键值观察者仍向其注册。观察信息被泄露,甚至可能被错误地附加到其他对象上。在 NSKVODeallocateBreak 上设置断点以在调试器中停止。这是当前的观察信息:(上下文:0x0,属性:0x536400> 上下文:0x0,属性:0x55aba0>)
有没有一种特殊的方式我应该删除观察者?或者也许是我应该删除它们的特定位置?
根据这个问题,我做对了,但为什么会收到此错误消息?
这是我的dealloc例程:
- (void)dealloc {
// Remove all observers.
for (NSString *path in [TekkPoint observedPaths]) {
[self removeObserver:[option_ tChart]
forKeyPath:path];
}
[description_ release];
[weight_ release];
[super dealloc];
}
需要注意的一点是,我的实现可能很奇怪,我正在从被观察者中添加和删除观察者,这会导致我的问题吗?