- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对键值观察方法 addObserver(_:forKeyPath:options:context:)
及其附带的 observeValue(forKeyPath:of:change:context) 之间的区别感到困惑:)
对比 bind(_:to:withKeyPath:options:)
方法。
我知道根据Apple的Cocoa Bindings Programming Topics bind
方法似乎使用了 KVO 中的概念,并且:
Cocoa bindings also use two protocols—
NSEditor
andNSEditorRegistration
—that help to ensure that any pending edits are either discarded or committed before user interface elements are disposed of.
但是,我也注意到 KVO(及其姐妹 KVC)是 Notifications来自 Foundation
的设计模式,而 bind
属于 Foundation
的 Object Runtime和 AppKit
的 Data Management设计模式。
每当您处理来自 NSController
的子类并且想要与像 CoreData
这样的模型层进行通信时,我似乎都会使用 bind
>。但是,苹果的Key-Value Observing Programming Guide说,
Key-value observing provides a mechanism that allows objects to be notified of changes to specific properties of other objects. It is particularly useful for communication between model and controller layers in an application.
我还在一些在线教程中看到 KVO 用于对象间通信(这不就是委托(delegate)的用途吗?)。
bind
和 KVO 似乎都做同样的事情。
两者有什么区别?
我应该使用哪一个以及用途是什么?
任何见解都会非常有帮助。提前致谢!
最佳答案
What's the difference between the two?
KVO 是 Cocoa Bindings 的支持技术。它允许一个对象观察另一个对象的属性(如果它们符合 KVC)。
Cocoa 绑定(bind)是 KVO 之上的一个概念,允许对象同步状态。通常是一个 View 和一个 Controller 。
例如,如果我有一个 NSSlider 的“value”绑定(bind)绑定(bind)到我的类中名为“foo”的整数属性,则 slider 将观察“foo”(使用 KVO)并在我更改其值时更新 UI。如果用户通过 UI 更改 slider ,它将为我更新“foo”。
请注意,绑定(bind)应该由支持它的对象记录。绑定(bind)名称甚至不需要是属性名称。例如,参见contentSet来自 NSArrayController 的绑定(bind)。
Which one should I use and what for?
如果你想观察属性值,请使用 KVO。
如果您正在使用 Cocoa Bindings 兼容对象(NSTableView、NSSlider、NSButton、NSArrayController 等),您应该考虑使用 Cocoa Bindings 来减少同步 UI 和 Controller 数据所需编写的粘合代码量。
关于ios - 键值观察(KVO)与绑定(bind)(_ :to:withKeyPath:options:),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52215341/
我对键值观察方法 addObserver(_:forKeyPath:options:context:) 及其附带的 observeValue(forKeyPath:of:change:context)
我有两个窗口:窗口A是从NIB加载的;窗口 B 是通过编程创建的。 两个窗口都有一个 NStextView:窗口 A 中 textview 的 attributeString 绑定(bind)到使用
我有一个 NSView 子类,它具有我想绑定(bind)的属性。我在子类中实现了以下内容: 我的 View .h: @property (readwrite, retain) NSArray *rep
我是一名优秀的程序员,十分优秀!