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@""]

 

posted @ 2020-08-05 16:44  银榇  阅读(116)  评论(0)    收藏  举报