4.iOS用什么方式实现对一个对象的KVO?
- 利用RuntimeAPI动态生成一个新子类,并且让instance对象的isa指向这个全新的子类
- 当修改instance对象的属性时,会调用新子类的
set
方法,set方法内部实现的伪代码
willChangeValueForKey:
父类原来的setter
didChangeValueForKey:
内部会触发监听器(Oberser)的监听方法( observeValueForKeyPath:ofObject:change:context:)
5.如何手动触发KVO?
可以通过手动调用以下方法
willChangeValueForKey:
didChangeValueForKey:
6.直接修改成员变量会触发KVO吗?
不会,因为没有走set方法
7.通过KVC修改属性会触发KVO吗?
会,通过KVC修改属性的时候,会调用到 willChangeValueForKey:
和
didChangeValueForKey:
两个方法,从而触发KVO
8.KVC的赋值和取值过程是怎样的?
赋值过程:
取值过程