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