kvo实现原理,kvo底层实现原理

1.kvo键值监听   当属性改变时监听属性值的变化

 添加监听方法    addObserver:(nonnull NSObject *) forKeyPath:(nonnull NSString *) options:(NSKeyValueObservingOptions) context:(nullable void *)

获取值方法        

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context;

2.kvo  添加监听方法时,  

(1)会利用runtime动态生成一个类NSKVONotifying_xxxx 继承 xxxx,并且让instance的isa指针指向全新的子类、重写-(void)setXxx{}方法,

(2)当修改instance对象属性时,会调用 -(void)setXxx{}里面的NSSetxxxValueAndNotify();的函数 ,NSSetxxxValueAndNotify()函数是Foundation的

(3)NSSetxxxValueAndNotify()函数,执行了下面的方法 ,

       willChangeValueForKey:

       [super setAge:age];

       didChangeValueForKey:

下面看代码证明动态生成NSKVONotifying_xxxx类 继承 xxxx

       证明1:

      

     证明2:

      

     证明3:

      

3 . NSKVONotifying_xxxx类看一下里面实现了哪些方法

 

4.证明   willChangeValueForKey:   ;  didChangeValueForKey:被调用了

    

 

posted @ 2020-06-01 17:31  可可锋  阅读(208)  评论(0)    收藏  举报