16

removeObserver:以前にオブザーバーとして追加されたオブジェクトを明示的に送信する必要がありNSNotificationCenterますか?

私は少し混乱していて、これに対する正確な答えを見つけることができません。

これについて、Observerを明示的に削除する必要がある理由や、コンパイラーが暗黙的にクラス/アプリケーションに配置しない理由など、詳細を教えてください。

4

4 に答える 4

13

はい、呼び出す必要がありremoveObserver:ます。そうでない場合、監視対象のクラスは、割り当て解除されたオブザーバーのすべてのインスタンスを呼び出すことができます。

于 2012-12-17T09:46:15.213 に答える
8

10.11以降、オブザーバーは割り当て解除方法で登録を解除する必要はありません。

NSNotificationCenterおよびNSDistributedNotificationCenterは、割り当てが解除される可能性のある登録済みオブザーバーに通知を送信しなくなりました。オブザーバーをゼロ化弱参照として格納できる場合、基になるストレージはオブザーバーをゼロ化弱参照として格納します。または、オブジェクトを弱く保存できない場合(ランタイムがオブジェクトを弱く保存できないようにするカスタムの保持/解放メカニズムがあるため)、オブジェクトは弱くないゼロ調整参照として保存されます。これは、オブザーバーが割り当て解除方法で登録を解除する必要がないことを意味します。[1]

于 2015-10-01T14:04:51.170 に答える
5

オブザーバーを削除することは常に賢明なアイデアです。オブザーバーを削除しないと、オブジェクトの割り当てが解除された場合でも、メッセージは送信されます。別の物に取り付けられている場合もあり、深刻なトラブルにつながることは間違いありません。

于 2012-12-17T09:46:55.350 に答える
2

KVOおよび通知のオブザーバーを常に削除する必要があります。

于 2012-12-17T09:54:58.960 に答える