通知
通知 は、フォーカスを取得しているウィンドウや閉じつつあるネットワーク接続など、イベントに関する情報をカプセル化します。イベント (たとえば、そのウィンドウが閉じようとしていることを知る必要のあるファイル) について知る必要があるオブジェクトは、そのイベントが発生したときに通知を受けたい通知センターに登録されます。イベントが発生すると、通知センターに通知が送信され、通知センターは、通知をすべての登録済みオブジェクトにブロードキャストします。オプションで、通知は通知キューに入れられ、それは通知を通知センターに遅延して送信し、指定された通知と、指定した特定の基準に従って類似する通知を統合します。
通知とその理由
オブジェクト間で情報を渡す標準的な方法は、メッセージをパスする事です。1 つのオブジェクトは別のオブジェクトのメソッドを呼び出します。ただし、メッセージのパスでは、メッセージを送信しているオブジェクトは受信者が誰で、どのメッセージに応答したのかを知る必要があります。時には、2 つのオブジェクトのこの緊密な結合は望ましくありません。最も顕著なのは、そうでなければ独立した 2 つのサブシステムを結合するためです。これらのケースでは、ブロードキャストモデルが導入されます。オブジェクトは通知を送信し、通知は、NSNotificationCenter オブジェクトまたは単に通知センターを介して適切な監視者に送信されます。
NSNotification オブジェクト (通知と呼ばれる) には、名前、オブジェクト、および optional の辞書が含まれます。名前は、通知を識別するタグです。オブジェクトは、通知のポスターがその通知の監視者に送信したいオブジェクトであり、通常、通知それ自体を送信したオブジェクトです。辞書には、イベントに関する追加情報が含まれている場合があります。
多くの Cocoa フレームワークは、オブジェクトが関心のあるイベントに反応するように通知を広範囲に利用します。各クラスから送信される通知は、クラスのリファレンスドキュメントの "通知" セクションで説明されています。
オブジェクトが通知を送信することがあります。他のオブジェクトは、通知センターに、送信時に監視者として通知を受け取るように自分自身を登録することができます。通知センターは、登録された監視者 (存在する場合) へのブロードキャスト通知を処理します。通知を送信するオブジェクト、通知に含まれるオブジェクト、および通知の監視者は、すべて異なるオブジェクトまたは同じオブジェクトである可能性があります。通知を送信するオブジェクトは、監視者について何も知る必要はありません。他方、監視者は、少なくとも通知名と、もしあれば、辞書へのキーを知る必要があります。
通知と委任 (デリゲート)
通知システムの使用は、委任 (デリゲート) の使用と同様ですが、以下の点が異なります。
- デリゲートオブジェクトだけでなく、任意の数のオブジェクトが通知を受け取ることができます。これは値を返すことを排除します。
- オブジェクトは、あらかじめ定義されたデリゲートメソッドだけでなく、通知センターから好きなメッセージをどれでも受け取ることができます。
- 通知を送信しているオブジェクトは、監視者が存在するかどうかさえ知る必要はありません。