2016-12-08 20 views
0

私はまだObjective-Cの基礎を学んでいます。私はこのようなコードをNSObjectに書いています。オブザーバーを取り除く必要がありますか?もしそうなら、どこで取り除くことができますか?私はARCを使用しています。 deallocで削除する必要がありますか?NSObjectでオブザーバを削除する必要はありますか?

- (id)init { 
    if (self = [super init]) 
    { 
     [[NSNotificationCenter defaultCenter] addObserver:self 
     selector:@selector(preferredContentSizeChanged:) 
     name:UIContentSizeCategoryDidChangeNotification 
     object:nil]; 

    } 
    return self; } 

答えて

0

iOS 9以降をターゲットにしている場合は、追加されたオブザーバーを削除する必要はありません。あなたはここにありの詳細を読むことができます:Unregistering NSNotificationCenter Observers in iOS 9

+0

ありがとう。 ios 8以降では、これを記述するだけですか? - (無効)dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self 名前:UIContentSizeCategoryDidChangeNotification オブジェクト:なし]; } –

+0

あなたは、自己を削除するだけで、すべてが削除されます – Tj3n

+0

キーパスオブザーバーはどうですか?ありがとう。 –

1

のiOS 8以前 あなたはオブザーバオブジェクトの割り当てを解除する前に、この通知のための登録を解除する必要があります。あなたが墜落する危険性があることを忘れてしまったら。

OS X 10.11とiOSで9.0以降

NSNotificationCenterとNSDistributedNotificationCenterはもはや割り当てを解除することができる登録オブザーバーに通知を送信しません。

https://developer.apple.com/library/content/releasenotes/Foundation/RN-Foundation/index.html#//apple_ref/doc/uid/TP30000742

+0

ios 8以降では、これを記述するだけですか? - (無効)dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self 名前:UIContentSizeCategoryDidChangeNotification オブジェクト:なし]; } –

関連する問題