iOSInterviewQuestions icon indicating copy to clipboard operation
iOSInterviewQuestions copied to clipboard

第46题,KVO问题

Open choykarl opened this issue 9 years ago • 1 comments

我测试的是先调用willChangeValueForKey: 然后调用的observeValueForKeyPath:ofObject:change:context: ,最后调用的是didChangeValueForKey:

不知道你写那段话是我理解错了还是你写错了.

choykarl avatar Feb 18 '16 04:02 choykarl

关于 observeValueForKeyPath:ofObject:change:context: ,和 didChangeValueForKey: 到底谁先调用的问题:

如果单单从下面这个例子的打印上,可能更像是你的说法正确:

(下面的代码,我放在仓库的Demo里了,有兴趣,可以跑下试试:)

enter image description here

但是,如果 observeValueForKeyPath:ofObject:change:context: 是在 didChangeValueForKey: 内部触发的操作呢?

不信你把 didChangeValueForKey: 注视掉,看下 observeValueForKeyPath:ofObject:change:context: 会不会执行。

了解到这一点很重要,正如 46. 如何手动触发一个value的KVO 所说的:

“手动触发”的使用场景是什么?一般我们只在希望能控制“回调的调用时机”时才会这么做。

而“回调的调用时机”就是在你调用 didChangeValueForKey: 方法时。

ChenYilong avatar Apr 06 '16 07:04 ChenYilong