Cocoaで監視を行うには、Key-Value監視と通知の2つの組み込みの方法があります。どちらのシステムでも、オブザーバーのコレクションを自分で維持または通知する必要はありません。フレームワークがそれを処理します。
Key-Value監視(KVO)を使用すると、オブジェクトのプロパティ(コレクションを表すプロパティも含む)を監視し、そのプロパティへの変更を通知できます。-addObserver:forKeyPath:options:context:
更新を受信するオブジェクト、更新を受信するプロパティのキーパス(受信者に対する)、および受信する更新のタイプを渡すオブジェクトを送信する必要があります。(コレクションを表すプロパティを監視する場合に使用できる同様の方法があります。)
通知は古く、重みがあります。NSNotificationCenter
イベントが発生したときに通知が渡されるオブジェクトとセレクターのペア(通常はデフォルトのセンター)に登録します。通知オブジェクト自体には、そのプロパティを介して任意のデータを含めることuserInfo
ができ、特定のオブジェクトに適用される通知ではなく、特定の名前のすべての通知を監視するように選択できます。
特定の場合にどちらを使用する必要がありますか?一般に、特定のオブジェクトの特定のプロパティへの変更を気にする場合は、Key-ValueObservingを使用します。それが設計されたものであり、意図的に軽量化されています。(他の用途の中でも、Cocoaバインディングが構築される基盤です。)プロパティによって表されない状態の変化を気にする場合は、通知がより適切です。
たとえば、ユーザーがモデルオブジェクトの名前を変更したときに同期を維持するには、KVOを使用します。オブジェクトグラフ全体がいつ保存されたかを知るために、通知を使用します。