iOS底层原理--KVO
思考:iOS用什么什么方式实现对一个对象的KVO?(KVO底层实现原理)
KVO实现流程:
1.runtime的api会动态生成一个全新的子类,将instance的isa指向其全新的子类
2.当我们动态修改instance的对象时,会调用Foundation的NSSetxxxxValueAndNotify重新其set方法
{
[self willChangeValueForKey@""];
//原来的set方法
[self didiChangeValueForKey@""];//其内部会调用Oberserver监听方法
}
其本质就是重新set方法
延伸1.如何手动触发KVO?
调用[self willChangeValueForKey@""]和[self didChangeValueForkey@""]即可
延伸2.手动修改成员变量会触发KVO吗?
不会,手动修改成员变量即不会触发set方法
延伸3.通过KVC修改成员变量会触发KVO吗?
会,KVC底层实现原理是调用了[self willChangeValueForKey@""]和[self didChangeValueForkey@""]

浙公网安备 33010602011771号