gpt4 book ai didi

ios - 键值观察(KVO)与绑定(bind)(_ :to:withKeyPath:options:)

转载 作者:行者123 更新时间:2023-12-03 16:40:13 24 4
gpt4 key购买 nike

我对键值观察方法 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 and NSEditorRegistration—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 属于 FoundationObject RuntimeAppKitData 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com