iOS willChangeValueForKey:中做了什么

最近复习OC底层原理,看到KVO这块,温故而知新。

我们都知道:
能否触发KVO回调,取决于是否调用了willChangeValueForKey:和didChangeValueForKey:这两个方法。而调用Observer的监听方法是在didChangeValueForKey:中进行的。

那为什么只调用didChangeValueForKey:无法成功调用Observer的监听方法呢?

原因:为了在回调中能够提供监听的属性的旧值,在willChangeValueForKey:中,会通过KVC取得旧值。没有取得旧值,调用Observer的监听方法的条件不成立。

关于willChangeValueForKey:中,通过KVC取得旧值:

iOS willChangeValueForKey:中做了什么_第1张图片
image.png

总结:

能否触发KVO回调,取决于是否调用了willChangeValueForKey:和didChangeValueForKey:这两个方法。其他条件都是基于这两个方法进行衍生。
在willChangeValueForKey:中,通过KVC取得旧值,所以必须满足KVC取值的规则。
在didChangeValueForKey:中,调用Observer的监听方法,所以Observer必须实现监听方法。

你可能感兴趣的:(iOS willChangeValueForKey:中做了什么)