5

ビューが UIApplicationWillResignActiveNotification をリッスンしているかどうかを確認したい。リッスンしている場合は、dealloc 中に削除します。目的の c を使用してこれを行う方法があるかどうか疑問に思っていましたか?

通知に複数の追加を避けるつもりはありません。ここで、私がやろうとしていることについてもう少し説明します。

カスタム gridView があります。スケーリングを有効または無効にして初期化できます。スケーリングが有効な初期化の場合、UIApplicationWillResignActiveNotification のオブザーバーとして自分自身を追加しますが、スケーリングが無効な初期化の場合、その通知のオブザーバーとして自身を追加しません。今、dealloc で、その gridView をその通知のオブザーバーとして削除したいと考えています。そのため、gridView がその通知をリッスンしているかどうかを確認する方法があるかどうか疑問に思っていました。

4

3 に答える 3

3

オブザーバーがリッスンしている通知を確認する方法はわかりませんが、UIApplicationWillResignActiveNotification をリッスンしているかどうかに関係なく、次のように呼び出します。

[[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationWillResignActiveNotification];

self がその通知をリッスンするのを停止するか、self がリッスンしていない場合は何もしません。

リッスンを停止したい通知の名前を指定するのがベスト プラクティスですが、これを dealloc に入れていると言ったので、これを行うだけでも安全です。

[[NSNotificationCenter defaultCenter] removeObserver:someObserver];
于 2015-06-17T16:06:19.413 に答える
1

dealloc メソッドをチェックインする場合、ビューが正しく削除するためにオブザーバーとして登録されている場合は、そうすべきではありません。あなたがする必要があるのは次のとおりです。

[[NSNotificationCenter defaultCenter] removeObserver:myView]

サブスクライブしたすべての通知のオブザーバーを削除します

于 2013-10-17T20:26:45.887 に答える
0

NSNotificationCenterは、このすぐに使用できるものをサポートしていません。KVOにも同じ問題があります。

通常、ブール値プロパティを使用してオブジェクトが登録されているかどうかを追跡し、このブール値が設定されている場合にのみ登録を解除します。

于 2015-06-17T16:17:29.797 に答える