23

私は で遊んでいて、いつ ?NSNotificationCenterではなく独自のカスタム通知センターを使用するのだろうかと思っていました。defaultCenterそして、これにはどのような利点がありますか?

私の無知を許してください。しかし、私は を使用するだけでかなり幸せに過ごすことができたように思えdefaultCenterますが、重要なものを見逃していないことを確認したいと思います.

4

3 に答える 3

14

Apple のドキュメントは曖昧で、通常はプログラマーが新しいドキュメントを作成する必要はないと述べているだけです。

実行中の各 Cocoa プログラムには、デフォルトの通知センターがあります。通常、自分で作成することはありません。NSNotificationCenter オブジェクトは、1 つのプログラム内でのみ通知を配信できます。

完全なソース: NSNotificationCenter ドキュメント

ただし、すべての通知センターは、名前とオブジェクトで識別される通知のネットワークを処理できます。オブザーバーを追加するときは、通常、次のような方法でメソッドを呼び出します。

[center addObserver: self selector: @selector(observe:) name: @"observe" object: someObject];

また、通知を投稿するときに、オブジェクトを指定できます。

[center postNotificationName: @"observe" object: someObject];

このように、N 個の名前と M 個のオブジェクトを使用すると、N*M 個の識別通知を処理できます。2 つの通知センターを使用する必要はないと思います。理論的には、すべての名前が完成したら、alloc+init を使用して別の名前を作成できますが、実際にどのように便利になるかはほとんどわかりません。

また、通知センターは、複雑なバインディングを避けるため (特に xib を大量に使用する場合)、相互に直接のポインターを所有していない 2 つのオブジェクトがある場合によく使用されることを考慮してください (そうでない場合は、単純にメソッドを呼び出さないのはなぜですか?)。ファイル)、一意の通知センター オブジェクトを持つことは非常に便利です。

代わりに、allot+init で取得した通知センターを使用する場合は、すべての通信オブジェクトがその通知センターへのポインターを持っていることを確認する必要があり、これにより複雑さが増します。すべての通知センターの電力が無駄になります。

于 2013-06-11T15:53:32.843 に答える
8

NSNotificationCenter は、シングルトン アクセサーを介して AppKit で頻繁に使用されdefaultCenterますが、実際には、NSNotificationCenter は単なる「一般的な分離メカニズム」にすぎません。独自のインスタンスをalloc/init使用できるようにすることは、その汎用性の表現にすぎません。他の用途に使おうと思えば使えます。

少しばかげた例で説明すると、次のように考えることができます。NSDocument には、windowControllersそのドキュメントに固有のすべてのウィンドウ コントローラーへの参照を含む、特定の祝福された重要な NSArray インスタンスを返すアクセサーがあります。つまり、NSArray は単なる「汎用リスト データ構造」です。指定された目的を持つこの特別なインスタンスが存在するからといって、独自の目的で NSArray を再利用することが役に立たないというわけではありません。NSArray と NSNotificationCenter はどちらも汎用データ構造/ビルディング ブロックを提供し、その特定のインスタンスは AppKit に関する祝福された「職業」で使用されますが、どちらも単独で役立つ可能性があります。

NSNotificationCenter のスタンドアロン インスタンスを作成する主なユース ケースは、複雑なサブシステムの複数のインスタンスを複数のスレッドで並行して実行し、クロススレッド通知によって混乱する可能性を避けたい場合です。この場合、一般的なパターンは、スレッドごとに 1 つの NSNotificationCenter を割り当てることです。これにより、オブジェクトの各ネットワークの通知が 1 つのスレッドに分割されます。これは通常、ソースに関係なく、指定された名前のすべてのnil通知をリッスンする目的でオブザーバーが object パラメーターを渡す場合に必要になります。

そうは言っても、私の経験では、NSNotificationCenter のプライベート インスタンスを作成することは非常にまれであることを認めます。

于 2013-06-11T16:33:42.317 に答える
0

アップルのドキュメント

アプリで通知を広範囲に使用する場合は、既定の通知センターだけに投稿するのではなく、独自の通知センターを作成して投稿することをお勧めします。通知が通知センターに投稿されると、通知センターは登録済みオブザーバーのリストをスキャンするため、アプリの速度が低下する可能性があります。通知を 1 つ以上の通知センターに合わせて機能的に整理することで、通知が投稿されるたびに行われる作業が減り、アプリ全体のパフォーマンスが向上します。

于 2020-02-13T22:23:33.970 に答える