アプリケーションを閉じると、メインコントローラークラスはそれ自体をオブザーバーとしてモデルから削除してから、モデルを解放します。このような:
- (void)dealloc {
[theModel removeObserver:self
forKeyPath:@"myValue"];
[theModel release];
[super dealloc];
}
そしてその直後、デバッガーは次のように言います。
2010-04-29 14:07:40.294 MyProgram [13678:a0f]クラスTheModelのインスタンス0x116f2e880は、キー値オブザーバーがまだ登録されている間に割り当てが解除されました。観測情報が漏洩し、他の物体に誤って付着する可能性もあります。NSKVODeallocateBreakにブレークポイントを設定して、デバッガーでここで停止します。現在の監視情報は次のとおりです。
<NSKeyValueObservationInfo0x100288450>(
<NSKeyValueObservance 0x1002aca90:Observer:0x116f40ec0、Key path:myValue、Options:<New:YES、Old:NO、Prior:NO> Context:0x0、Property:0x116f80430>
)
ここで、0x116f2e880
は実際にモデルであり、0x116f40ec0
実際にはコントローラーです。
コントローラーがオブザーバーとして自分自身を削除したときに、コントローラーがオブザーバーになるにはどうすればよいですか?