iOSInterviewQuestions
iOSInterviewQuestions copied to clipboard
第46题,KVO问题
我测试的是先调用willChangeValueForKey: 然后调用的observeValueForKeyPath:ofObject:change:context: ,最后调用的是didChangeValueForKey:
不知道你写那段话是我理解错了还是你写错了.
关于 observeValueForKeyPath:ofObject:change:context: ,和 didChangeValueForKey: 到底谁先调用的问题:
如果单单从下面这个例子的打印上,可能更像是你的说法正确:
(下面的代码,我放在仓库的Demo里了,有兴趣,可以跑下试试:)

但是,如果 observeValueForKeyPath:ofObject:change:context: 是在 didChangeValueForKey: 内部触发的操作呢?
不信你把 didChangeValueForKey: 注视掉,看下 observeValueForKeyPath:ofObject:change:context: 会不会执行。
了解到这一点很重要,正如 46. 如何手动触发一个value的KVO 所说的:
“手动触发”的使用场景是什么?一般我们只在希望能控制“回调的调用时机”时才会这么做。
而“回调的调用时机”就是在你调用 didChangeValueForKey: 方法时。