web-dev-qa-db-ja.com

ARCのNSNotificationCenter removeObserverは必要ですか?

オブザーバーを追加すると、オブジェクトの保持カウントが増加しますか?はいの場合、ARCはこのオブザーバーの削除も処理しますか?そうでない場合、どこでオブザーバーを削除する必要がありますか?

42
Tudor

ARCを使用する場合でも、オブザーバーを明示的に削除する必要があります。 deallocメソッドを作成して削除します。

-(void)dealloc {
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

ここで[super dealloc];を呼び出す必要がないメソッドが表示された場合は、スーパーdeallocを使用しないメソッドのみが必要です。

Swiftの更新

Swiftでコードを記述している場合は、deinitメソッドでオブザーバーを削除できます。

deinit {
        NSNotificationCenter.defaultCenter().removeObserver(self)
       }
79
nsgulliver