美文网首页iOS
KVO原理总结

KVO原理总结

作者: Sweet丶 | 来源:发表于2019-03-09 19:52 被阅读10次

    iOS 用什么方式实现对一个对象的KVO?

    1. 利用runtime api动态生成一个子类,并让对象的isa指针指向这个新生成的子类。
    2. 新生成的子类会重写setter方法,当外部调用setter方法修改属性时,会调用新的setter方法,其内部会调用foundation框架的_NSSetxxxValueAndNotify函数,里面的xxx是属性的类型。
    3. 该函数内部有以下调用:willChangeValueForKey: -> 父类原来的setter方法 -> didChangeValueForKey:
    4. didChangeValueForKey: 方法的内部会使属性的监听者们调用每个监听者的方法- (void)observeValueForKeyPath:ofObject:change:context:
    5. 由上可知,如果是自己手动给成员变量赋值,不会调用到setter方法,也就不会触发KVO; 如果要手动触发KVO,需要自己手动调用willChangeValueForKey:didChangeValueForKey: 方法,只调用后者是无效的

    相关文章

      网友评论

        本文标题:KVO原理总结

        本文链接:https://www.haomeiwen.com/subject/phrepqtx.html