5

最初に使用してから同じ名前で-removeObserver:呼び出しても問題ありませんか? -addObserver:それとも-addObserver:先に先にするのがルール-removeObserver:ですか?

OS 4.0 を使用して試してみましたが、問題ないようです (クラッシュ、警告などはありません)。

-(void) setObserver
{
[[NSNotificationCenter defaultCenter] removeObserver:self 
                                                name:OBSERVER_NAME object:nil]; 

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector: @selector(selectorName)
                                             name:OBSERVER_NAME 
                                           object:nil]; 
}

その理由は、メソッドが内部でメモリ警告が発行された場合にメソッドが再度呼び出されたとselectorName仮定して、同じメソッドを持つ 2 つのオブザーバーが 2 回呼び出されるのを防ぐためです。-setObserver-viewDidLoad

-removeObserver:また、中に呼び出す必要があり-deallocますか?

4

1 に答える 1

3

2 回呼び出される場合は-selectorName、コードに別の問題がある可能性があります。また、Cocoa が、まだ追加していないオブザーバーを削除することを優雅に行うとしても、私は実際にはそうしません。

ユーザー tonklon がコメントで述べているように、おそらく のオブザーバーを削除する必要があります-viewDidUnload。最後の質問については、 でオブザーバーを削除することも合理的ですが、オブザーバーの削除-deallocなどのことがメモリ管理の副作用としてではなく、決定論的な時間に発生するようにコードを構築することをお勧めします。

于 2010-11-22T09:15:36.477 に答える