1

いくつかの NSNotificationCenter 通知をサブスクライブするオブジェクトを作成しましたが、インスタンス化へのポインタがないため、オブジェクトは解放されています。インスタンス化には、私が持っている別のクラスにメソッドを呼び出すデリゲートがあるため、ポインターは何の目的も果たさないため、それへのポインターも必要ないと感じました。

NSNotificationCeneter基本的に、デフォルトの通知の一部をサブスクライブするクラス DelegateListener (名前は単なる例です) のインスタンス化があります。このインスタンス化は、インスタンス化が終了した後、どのポインターにも割り当てられません。ただし、インスタンス化にはデリゲートというプロパティがあります。インスタンス化中にそのデリゲートに値を割り当てます。そのデリゲートは、サブスクライブした通知が発生したときに DelegateListener が呼び出すメソッドを実装しています。

これに関する問題は、作成した DelegateListener のインスタンス化が、保持されたポインターに割り当てない限り、解放されることです。ARC 内での DelegateListener インスタンス化の自動リリースを回避する方法はありますか?

4

1 に答える 1

3

DelegateListener複数のインスタンスがない場合は、インスタンスを静的変数に格納する必要があります。

ポインタは何の役にも立たないので、ポインタも持つ必要はないと感じました。

ポインターは目的を果たします (または少なくともそうすべきです)。通知を聞く必要がなくなったら、通知のDelegateListener受信を解除する必要があります。少なくとも、これは、アプリケーションがバックグラウンドに移行したとき (バックグラウンド処理を実行することが目的でない限り)、およびアプリケーションが終了したときに発生するはずです。

[[NSNotificationCenter defaultCenter] removeObserver:delegateListener];
于 2012-09-12T03:36:16.033 に答える