我对键值观察方法addObserver(_:forKeyPath:options:context:)
与它的附带observeValue(forKeyPath:of:change:context:)
之间的区别感到困惑。
我知道,根据苹果公司的Cocoa Bindings Programming Topics,bind(_:to:withKeyPath:options:)
方法似乎使用了KVO的概念,并且:
可可绑定还使用两种协议
bind
和NSEditor
,这有助于确保在处置用户界面元素之前,所有待处理的编辑都被丢弃或提交。
但是,我还注意到KVO(及其姐妹KVC)是NSEditorRegistration
的{{3}}设计模式,而Foundation
属于bind
的{{3} }和Foundation
的{{3}}设计模式。
当您处理AppKit
的子类并且想要与bind
之类的模型层进行通信时,似乎会使用NSController
。但是,苹果公司的Notifications说,
键值观察提供了一种机制,该机制允许将其他对象的特定属性的更改通知给对象。 它对于应用程序中模型层和控制器层之间的通信特别有用。
在一些在线教程中,我还看到了KVO用于对象间通信(这不是代表的目的吗?)。
CoreData
和KVO似乎都做同样的事情。
两者之间有什么区别?
我应该使用哪个?做什么?
任何见解都会非常有帮助。预先感谢!
答案 0 :(得分:1)
两者之间有什么区别?
KVO是可可粘合剂的支撑技术。它允许对象观察他人的属性(如果它们符合KVC)。
可可绑定是KVO之上的一个概念,它允许对象同步状态。通常是视图和控制器。
例如,如果我有一个NSSlider的“值”绑定绑定到我班上一个名为“ foo”的整数属性,则滑块将观察“ foo”(使用KVO)并在每次更改其值时更新UI。如果用户通过用户界面更改了滑块,它将为我更新“ foo”。
请注意,绑定应由支持绑定的对象记录。绑定名称甚至不需要是属性名称。例如,请参见NSArrayController的绑定中的contentSet。
我应该使用哪个?做什么?
如果要观察属性值,请使用KVO。
如果您正在使用与Cocoa Bindings兼容的对象(NSTableView,NSSlider,NSButton,NSArrayController等),则应考虑使用Cocoa Bindings来减少同步UI和Controller数据所需编写的粘合代码量。