68

それぞれの長所と短所は何ですか?
具体的にどこで使うべきですか?

4

6 に答える 6

105

ここでの経験則は、イベントの通知を希望するクライアントの数です。それが主に1つのオブジェクトである場合(たとえば、ビューを閉じる、ボタンがクリックされたときに動作する、またはダウンロードの失敗に反応する)、デリゲートモデルを使用する必要があります。

発生するイベントが一度に多くのオブジェクトに関係する可能性がある場合(たとえば、画面の回転、メモリ使用量、ユーザーのログイン/ログアウト)、を使用する必要がありますNSNotificationCenter

于 2009-12-18T12:41:01.033 に答える
38

それらの目的は異なります:

  • 通知は、送信者から不明な複数の受信者にメッセージをブロードキャストするために使用されます。

  • 委任は、送信者に代わって動作する単一の既知の受信者にメッセージを送信するために使用されます。

于 2009-12-18T12:39:47.820 に答える
12

通知は通常、他のスレッドでも発生する変更をUIに通知するのに適しています。Appleのドキュメントでは、安定性とパフォーマンスの両方の理由から、可能な場合はスレッド間でデリゲートを使用することを強く推奨していません。Macでは、バインディングの使用を提案していますが、iPhoneには存在しないため、通知がおそらく次善の策です。

于 2009-12-18T13:40:23.707 に答える
7

パフォーマンスを考慮することは良い考えです(通知されたオブジェクトの数が少ない場合は委任が適切であり、オブジェクトの数が多い場合は通知センターが適切ですか、それともプロファイラーを実行しますか?)が、Objective-CとCで記述される可能性が高い、コードベースの非常に高性能な部分について話す可能性が低くなるため、モジュール間のコンパイル時の依存関係が減少します。

単一のデリゲートではなく、デリゲートの配列を使用することを妨げるものは何もありません。

NSNotificationCenterは、作成したネットワークスタックコンポーネントとカスタムデバイスステータス監視インターフェイスのステータスにのみ使用できます。ただし、ほとんどのカップリングでは、アプリのグローバルステータスとは関係なく、ほとんどの場合、Objective-Cで通常のインターフェイスコントラクトを使用する方が明確であり、NSNotificationCenterを使用するよりも後から来る人々をフォローする方が簡単だと思います。実際、私は自分のカスタムイベントにNotificationCenterを使用したことがなく、他の誰かが私のコードを読んでコードを理解しやすくするためにデリゲートを使用することを好みます。

そして最後に、もちろん、標準APIとの間の通知では、選択の余地はなく、Appleが特定のイベントに対して禁止している2つの方法のいずれかを使用する必要があります。

于 2009-12-18T12:59:56.177 に答える
6

通知は、UIコンポーネントを分離するのに適しています。これにより、コントローラーやモデルを変更せずに任意のビューをプラグインできます。緩く結合された設計には間違いなく優れています。

ただし、委任と通知の間のパフォーマンスについては、呼び出しの頻度を考慮する必要があります。

委任は頻度の高いイベントに適している可能性があり、通知は頻度の低いイベントに適していますが、受信者は多くなります。何を選ぶかは予測次第です。

于 2011-07-15T17:02:29.793 に答える
3

これら2つの間のオプションは、。なしでオブザーバーパターンを使用することNSNotificationCenterです。ここで私のObjective-Cの実装を見てください

于 2010-10-13T07:35:02.830 に答える