2017-01-17 3 views
3

私はアプリのライフサイクルのすべてでそれを必要としているオブザーバーがいます、それを削除する必要がありますか? アプリが閉鎖された後にGCが削除されると思いますか? 「はい」の場合はいつ削除しますか? deinitオブザーバーを義務化していますか?

+0

[this](http://stackoverflow.com/a/15941336/4539192)をご覧ください。これはあなたがiOS 8のサポートを提供していることを前提としています.iOS 9以降では必要なくなりました。[here](https://developer.apple.com/library/content/releasenotes/Foundation/RN-Foundation/index .html#10_11NotificationCenter)。 – Rikh

+0

偉大な、私はそれを受け入れるようにこれを回答として送信してください。 – AVEbrahimi

答えて

5

iOS 8以前にサポートを提供している場合。あなたはdeallocまたはviewWillDisappearの中のオブザーバーを削除する必要があります。より詳細な回答はhereです。

iOS 9以降のサポートを提供している場合、オブザーバを手動で削除する必要はなくなりました。アップルのドキュメントから:

OS X 10.11とiOS 9.0でNSNotificationCenterと NSDistributedNotificationCenterはもはや割り当てを解除することができる 登録オブザーバーに通知を送信しません。オブザーバがゼロ化弱参照として格納できる場合、 は、オブザーバをゼロ化弱参照として保存するか、または オブジェクトを弱く格納できない場合(つまり、保持/解放の メカニズムがある場合)ランタイムが オブジェクトを弱く格納できないようにする)、非弱ゼロ設定 参照としてオブジェクトを格納します。これは、オブザーバの解除方法でオブザーバの登録を解除する必要がないことを意味します。

より詳細な説明は、hereです。

注:ただし、上記のリンク先のドキュメントに記載されているブロックベースの通知を使用する場合は注意してください。