Меня смущает разница между методом наблюдения ключевого значения addObserver(_:forKeyPath:options:context:)
и сопровождающим его observeValue(forKeyPath:of:change:context:)
и методом bind(_:to:withKeyPath:options:)
.
Я знаю, что согласно Apple Темы программирования привязок какао метод bind
, похоже, использует концепции KVO, а именно:
Привязки какао также используют два протокола -
NSEditor
иNSEditorRegistration
, которые помогают гарантировать, что любые ожидающие изменения либо отменены, либо зафиксированы до того, как будут удалены элементы пользовательского интерфейса.
Но я также заметил, что KVO (и его сестра, KVC) - это Уведомления шаблон проектирования из Foundation
, а bind
принадлежит Object Runtime Foundation
и Data Management шаблон проектирования.
Мне кажется, что bind
используется всякий раз, когда вы имеете дело с подклассом из NSController
и хотите общаться с таким слоем модели, как CoreData
. Но зато Руководство по программированию наблюдения за ключевыми значениями говорит,
Наблюдение "ключ-значение" предоставляет механизм, который позволяет объектам получать уведомления об изменениях определенных свойств других объектов. Это особенно полезно для связи между уровнями модели и контроллера в приложении.
Я также видел, как KVO используется для межобъектного взаимодействия (разве не для этого предназначены делегаты?) в нескольких онлайн-руководствах.
И bind
, и KVO, похоже, делают одно и то же.
В чем разница между ними?
Какой из них использовать и для чего?
Любое понимание было бы действительно полезно. Заранее спасибо!