Существует два встроенных способа наблюдения в Какао: наблюдение значения ключа и уведомления. Ни в одной из систем вам не нужно поддерживать или уведомлять собрание наблюдателей самостоятельно; Фреймворк с этим справится.
Наблюдение значения ключа (KVO) позволяет вам наблюдать свойство объекта - включая даже свойство, представляющее коллекцию - и получать уведомления об изменениях этого свойства. Вам просто нужно отправить объект -addObserver:forKeyPath:options:context:
, передающий объект, для которого вы хотите получать обновления, ключевой путь свойства (относительно получателя), для которого вы хотите получать обновления, и типы обновлений, которые вы хотите получать. (Существуют аналогичные методы, которые вы можете использовать, если хотите наблюдать свойство, представляющее коллекцию.)
Уведомления старше и тяжелее. Вы регистрируетесь с NSNotificationCenter
- обычно центром по умолчанию - парой объектов и селекторов, чтобы получать уведомление при возникновении события. Сам объект уведомления может содержать произвольные данные через его свойство userInfo
, и вы можете выбрать просмотр всех уведомлений с определенным именем, а не тех, которые относятся к определенному объекту.
Что вы должны использовать в каждом конкретном случае? В общем, если вы заботитесь об изменениях в определенном свойстве определенного объекта, используйте Key-Value Observing. Вот для чего он предназначен, и он намеренно легкий. (Среди прочего, это основа, на которой строятся привязки Какао.) Если вас волнует изменение состояния, которое не представлено свойством, тогда уведомления более уместны.
Например, чтобы оставаться в синхронизации, когда пользователь меняет имя объекта модели, я бы использовал KVO. Чтобы узнать, когда был сохранен весь граф объектов, я бы использовал уведомления.