13

特定の通知名のオブザーバー(オブジェクトとセレクター)のリストを取得したいのですが。そのための公式APIはありません。また、これを実現するためにNSNotificationCenterをサブクラス化できることも知っています。ただし、NSNotificationCenterの使用はコード全体またはバイナリフレームワークにまで分散しているため、これが実行可能なオプションではない場合があります。

だから私はこれを行うための非公式/私的な方法を探しています。(デバッグのみに関するものなので、問題ありません。)

4

2 に答える 2

19

最後に、Apple はすべての通知センター オブザーバーを印刷する方法を追加しました。

po [NSNotificationCenter defaultCenter]

名前、オブジェクト、オブザーバー、およびオプションを含むカンマ区切りのリストを出力します。

<NSNotificationCenter:0x7f997b307500>
Name, Object, Observer, Options
WebPreferencesRemovedNotification, 0x11165b680, 0x116c87ff8, 1400
UIApplicationWillEnterForegroundNotification, 0x11165b680, 0x7f997a838000, 1400
...
于 2015-11-25T09:22:15.917 に答える
1

サブクラス化したくない場合は、NSNotificationCenter元のメソッドの名前を変更addObserver:selector:name:objectし、そのような名前で独自のメソッドを作成し、そこにオブザーバーを配列に追加してから、元の名前の変更されたメソッドを呼び出すことができます。

次の方法を見てください:class_addMethod、、。class_replaceMethodclass_getMethodImplementation

このSOの質問も見てください:メソッドスウィズリング

オブザーバーが必要な理由はわかりませんが、このクラスが役立つ場合があります。これにより、オブザーバーが自動的に削除され、必要なものになると思います。SFObservers

于 2012-11-07T14:16:00.327 に答える