1

我对 Objective-C 中的 KVO 有点困惑。如果我的属性符合 KVO,我是否有两种选择来发出通知:1.addObserver:.../observeValueForKeyPath:...和 2. did/willChangeValueForKey...,还是我们应该did/willChangeValueForKey在特定上下文中使用这些方法?

我注意到第二个 ( did...) 可用于将多个更改分组到单个通知中;关于这两种方式还有其他重要的事情需要了解吗?第一种方法 ( addObserver:...) 是否无法在某些上下文中使用(尽管上下文符合 KVO)?

编辑:在 NSManagedObject 的子类中,只 did/willChangeValueForKey...使用了,但没有使用addObserver:.../observeValueForKeyPath:...:你知道为什么吗?

4

1 回答 1

3

这两对被KVO交互的双方使用;它们根本不可互换。

addObserver:forKeyPath:options:context:并由想要进行观察observeValueForKeyPath:ofObject:change:context:客户使用。

observeValueForKeyPath:ofObject:change:context:本质上是一个回调;当观察到的(“提供者”)对象使用另一组方法(各种/ )时,它将由内部 KVO 机制发送。通知实际上是在那个时候通过方法发出的。didwill changeValueFor...change

于 2012-04-08T19:20:30.583 回答