通知センター
通知センター は、通知の送受信を管理します。特定の条件を満たす通知をすべての監視者に通知します。通知情報は NSNotification オブジェクトにカプセル化されています。クライアントのオブジェクトは、他のオブジェクトによって送信された特定の通知の監視者として通知センターに登録されます。イベントが発生すると、オブジェクトは適切な通知を通知センターに送信します。(通知の送信の詳細については、通知の送信 を参照してください) 通知センターは、通知を唯一の引数として渡して、登録された各監視者にメッセージを急送します。送信するオブジェクトと監視オブジェクトは同じである可能性があります。
Cocoa には 2 種類の通知センターがあります。
- NSNotificationCenter クラスは、単一プロセス内の通知を管理します。
- NSDistributedNotificationCenter クラスは、単一のコンピュータ上の複数のプロセスにわたる通知を管理します。
NSNotificationCenter
各プロセスには、NSNotificationCenter +defaultCenter クラスメソッドでアクセスするデフォルトの通知センターがあります。この通知センターは、1 つのプロセス内の通知を処理します。同じマシン上のプロセス間の通信には、分散通知センター (NSDistributedNotificationCenter を参照の事) を使用します。
通知センターは、監視者に通知を同期的に配信します。言い換えれば、通知を送信するときには、すべての監視者が通知を受信して処理するまで、コントロールはポスターに戻されません。通知を非同期的に送信するには、通知キューを使用します。これについては、通知キュー を参照してください。
マルチスレッドのアプリケーションでは、通知が送信されたスレッドで常に通知は配信されます。監視者自体が登録された同じスレッドではない可能性があります。
NSDistributedNotificationCenter
各プロセスには、NSDistributedNotificationCenter +defaultCenter クラスメソッドでアクセスするデフォルトの分散通知センターがあります。この分散通知センターは、単一のマシン上のプロセス間で送信できる通知を処理します。異なるマシン上のプロセス間の通信には、分散オブジェクトを使用します (分散オブジェクトプログラミングトピックス を参照の事)。
分散通知を送信するのは高価な操作です。通知はシステム全体のサーバーに送信され、分散通知用に登録されたオブジェクトを持つすべてのプロセスに配布されます。通知の送信と通知が別のプロセスに到着するまでの待ち時間は制限されません。実際、送信される通知が多すぎてサーバーのキューがいっぱいになると、通知が省略されることがあります。
分散通知は、プロセスの実行ループを介して配信されます。分散通知を受信するには、プロセスが NSDefaultRunLoopMode などの "共通" モードのいずれかで実行ループを実行していなければなりません。受信プロセスがマルチスレッドの場合、メインスレッドに到着する通知に依存しないでください。通知は通常、メインスレッドの実行ループに配信されますが、他のスレッドも通知を受け取ることができます。
通常の通知センターでは任意のオブジェクトの監視が可能ですが、分散通知センターでは文字列オブジェクトの監視のみに制限されています。送信するオブジェクトと監視者は異なるプロセスにありうるため、通知には任意のオブジェクトへのポインタを含めることはできません。したがって、分散通知センターでは、通知オブジェクトとして文字列を使用するには通知が必要です。通知の照合は、オブジェクトポインタではなく、この文字列に基づいて行われます。