私のクラスでキー値の観測を使用しようとしています。私はオブザーバを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];
}
ことの一つは、私が追加とobserveeからオブザーバーを削除していますということです、これは私の問題を引き起こす可能性が?
男この回答はちょうど私の人生を保存した、あなたは王 –
シンプルで簡単です。 +1 – govi
もう1つのオプションは、オブジェクトを観察しているオブジェクトで観察されているオブジェクトへの強い参照を作成することです。このようにして、オブザーバも解放されるまで、観察されたオブジェクトは解放されません。 – Avario