我想在我的一个类中使用键值观察。我在init方法中注册了观察者,并在dealloc中删除/取消注册它们,但根据我的调试打印,我得到以下错误,这似乎是在调用dealloc方法之前发生的。何时应该删除观察者?关于在删除观察者之前释放对象的错误
类TekkPoint的一个实例0x583870而键值观察家仍用它注册被释放。观察信息正在泄漏,甚至可能被错误地附加到其他物体上。在NSKVODeallocateBreak上设置一个断点,在调试器中停止。下面是当前观测信息: ( 语境:为0x0,物业:0x536400> 语境:为0x0,物业:0x55aba0> )
有没有我应该删除观察者一种特殊的方式?或者,也许我应该删除它们的某个地方?
根据这一question我在做正确的事情,但我为什么会得到这个错误信息?
这里是我的dealloc例行:
- (void)dealloc {
// Remove all observers.
for (NSString *path in [TekkPoint observedPaths]) {
[self removeObserver:[option_ tChart]
forKeyPath:path];
}
[description_ release];
[weight_ release];
[super dealloc];
}
有一点要注意,可能会奇怪我的实现是我加入,并从observee删除观察员,这可能会导致我的问题?
不,我绝对有正确的顺序。 [super dealloc]是我在dealloc中调用的最后一个东西。 – 2009-06-13 15:39:19
旧线程,但只是碰到它。是的,超级dealloc绝对应该是最后的。 – Ben 2010-12-06 23:32:13