Введение в значение ключа, наблюдая руководство по программированию

Наблюдение значения ключа является механизмом, позволяющим объектам быть уведомленными относительно изменений в указанных свойствах других объектов.

Сразу

Наблюдение значения ключа обеспечивает механизм, позволяющий объектам быть уведомленными относительно изменений в определенных свойствах других объектов. Это особенно полезно для коммуникации между моделью и уровнями контроллера в приложении. (В OS X уровень контроллера обязательная технология полагается в большой степени на наблюдение значения ключа.) Объект контроллера обычно наблюдает свойства объектов модели, и объект представления наблюдает свойства объектов модели через контроллер. Кроме того, однако, объект модели может наблюдать другие объекты модели (обычно для определения, когда зависимое значение изменяется) или даже оно (снова для определения, когда зависимое значение изменяется).

Можно наблюдать свойства включая простые атрибуты, к - отношения, и к - много отношений. Наблюдатели к - многим отношениям сообщают о типе внесенного изменения — а также какие объекты вовлечены в изменение.

Существует три шага к установке наблюдателя свойства. Понимание этих трех шагов приводит ясный пример того, как работает KVO.

  1. Во-первых, посмотрите, есть ли у Вас сценарий, где наблюдение значения ключа могло быть выгодным, например, объект, который должен быть уведомлен, когда любые изменения внесены в определенное свойство в другом объекте.

    Art/kvo_objects.jpg

    Например, a PersonObject захочет знать о любых изменениях, внесенных в их accountBalance в BankObject.

  2. PersonObject должен зарегистрироваться как наблюдатель BankObject accountBalance свойство путем отправки addObserver:forKeyPath:options:context: сообщение.

    Art/kvo_objects_connection.jpg
  3. Для ответа на уведомления изменения наблюдатель должен реализовать observeValueForKeyPath:ofObject:change:context: метод. Эта реализация метода определяет, как наблюдатель реагирует на уведомления изменения. Именно в этом методе можно настроить ответ на изменение в одном из наблюдаемых свойств.

    Art/kvo_objects_implementation.jpg

    Регистрация для Наблюдения Значения ключа описывает, как зарегистрировать и получить уведомления наблюдения.

  4. observeValueForKeyPath:ofObject:change:context: метод автоматически вызывается, когда значение наблюдаемого свойства изменяется KVO-совместимым способом, или если изменяется ключ, от которого это зависит.

    Art/kvo_objects_notification.jpg

    Регистрация Зависимых Ключей объясняет, как указать, что значение ключа зависит от значения другого ключа.

Основное преимущество KVO - то, что Вы не должны реализовывать свою собственную схему отправить уведомлениям каждый раз, когда свойство изменяется. Его четко определенная инфраструктура имеет поддержку уровня платформы, упрощающую принимать — обычно Вы не должны добавлять код к своему проекту. Кроме того, инфраструктура уже полнофункциональна, который упрощает поддерживать многократных наблюдателей для единственного свойства, а также зависимые значения.

Соответствие KVO описывает различие между автоматическим и ручным наблюдением значения ключа, и как реализовать обоих.

В отличие от уведомлений то использование NSNotificationCenter, нет никакого центрального объекта, предоставляющего уведомление изменения всем наблюдателям. Вместо этого уведомления отправляются непосредственно в объекты наблюдения, когда внесены изменения. NSObject обеспечивает это базовое внедрение наблюдения значения ключа, и необходимо редко должны быть переопределить эти методы.

Значение ключа Наблюдая Подробные данные Реализации описывает, как реализовано наблюдение значения ключа.