[〜#〜] arc [〜#〜] の下にあるオブジェクトからオブザーバーを削除するにはどうすればよいですか?オブザーバーを追加するだけで、削除するのを忘れますか?メモリーを手動で管理しなくなった場合、観察を辞めるのはどこですか?
たとえば、View Controllerの場合:
[self.view addObserver:self
forKeyPath:@"self.frame"
options:NSKeyValueObservingOptionNew
context:nil];
以前は、removeObserver:
は、View Controllerのdealloc
メソッドにあります。
ARCの下に-dealloc
を実装できます。これは、キー値の監視を削除するのに適切な場所のようです。このメソッド内から[super dealloc]
を呼び出さないようにします。
以前に-release
をオーバーライドしていた場合、間違った方法で作業していました。
私はこのコードでそれをします
- (void)dealloc
{
@try{
[self.uAvatarImage removeObserver:self forKeyPath:@"image" context:nil];
} @catch(id anException) {
//do nothing, obviously it wasn't attached because an exception was thrown
}
}