クラスの 1 つでキー値監視を使用しようとしています。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];
}
私の実装で奇妙なことに注意すべきことの 1 つは、オブザーバーをオブザーバーに追加したり、オブザービーから削除したりしていることです。これにより、問題が発生する可能性がありますか?