我对Objective-C中的KVO感到有点困惑。如果我的属性符合KVO,我是否有两个选择来发出通知:1。addObserver:.../observeValueForKeyPath:...
和2. did/willChangeValueForKey...
,还是应该在特定上下文中使用方法did/willChangeValueForKey
?
我注意到第二个(did...
)可以用来将一些更改分组到一个通知中;关于这两种方式还有其他重要的事情要理解吗?第一种方法(addObserver:...
)是否无法在某些上下文中使用(尽管上下文符合KVO)?
编辑:
在NSManagedObject的子类中,只使用了did/willChangeValueForKey...
,但没有使用addObserver:.../observeValueForKeyPath:...
:你知道为什么吗?
答案 0 :(得分:3)
这两对用于双方对KVO的互动;它们根本不可互换。
addObserver:forKeyPath:options:context:
和observeValueForKeyPath:ofObject:change:context:
由客户端使用,即想要进行观察的人。
observeValueForKeyPath:ofObject:change:context:
本质上是一个回调;当observ ed (“provider”)对象使用另一组方法(各种did
/ will
{{1}时,它将由内部KVO机制发送})。该通知实际上是通过changeValueFor...
方法在那时进行的。