美文网首页
三.KVO窥探

三.KVO窥探

作者: 郝程序猿 | 来源:发表于2021-09-02 15:28 被阅读0次

KVO:键值监听

KVO的本质是什么?
利用runtime的动态特性生成了一个子类,并让instance对象的isa指向这个全新的子类
当修改instance对象的属性时候,会调用Foundation的_NSSetXXXValueAndNotify方法,
其内部调用了willChangeValueForKey 父类原来的setter didChangeValueForKey ,其内部会触发监听器Observer的监听方法 observeValueForKeyPath:ofObject:change:context:方法

如何手动触发KVO?
直接调用 willChangeValueForKey和didChangeValueForKey方法

直接修改成员变量会触发KVO么?
不会,因为没有触发set方法 ,可以通过willChangeValueForKey和didChangeValueForKey进行手动触发

在没有监听对象的时候 该对象的isa指向的类中 是只有isa superclass set get方法等 没有任何区别
如果增加监听后 该对象的isa指向的是一个通过runtime动态添加新生成的NSKVONotifying_xxx子类 该类中自己实现了set方法 该类中的superClass指向的是原来的类 ,而该新生成的子类的isa指向的自己的元类对象

新生成的子类

由上图可以知道,原来的set方法里面生成了一个_NSSetXXValueAndNotify方法,内部调用了 willChangeVauleForKey 和didChangeValueForKey方法 中间调用了原有的super中的set方法进行赋值
调用didChangeValueForKey内部调用了observer的observerValueForKeyPath:ofObject:change:context:方法
如图:

image.png

重写了class方法为了是屏蔽内部实现,隐藏了NSKVONotifying_XXX类的存在

相关文章

  • 三.KVO窥探

    KVO:键值监听 KVO的本质是什么?利用runtime的动态特性生成了一个子类,并让instance对象的isa...

  • iOS-KVO(二) 使用注意点

    iOS-KVO(一) 基本操作iOS-KVO(二) 使用注意点iOS-KVO(三) 窥探底层实现iOS-KVO(四...

  • iOS-KVO(三) 窥探底层实现

    iOS-KVO(一) 基本操作iOS-KVO(二) 使用注意点iOS-KVO(三) 窥探底层实现iOS-KVO(四...

  • iOS-KVO(四) 自定义KVO+Block

    iOS-KVO(一) 基本操作iOS-KVO(二) 使用注意点iOS-KVO(三) 窥探底层实现iOS-KVO(四...

  • iOS-KVO(一) 基本操作

    iOS-KVO(一) 基本操作iOS-KVO(二) 使用注意点iOS-KVO(三) 窥探底层实现iOS-KVO(四...

  • kvo底层窥探

    相信kvo 作为一个ios开发者都用过,但是kvo底层具体怎么实现的,相信很多人也不太明白或者就算有的人明白 但是...

  • iOS-面试题1-NSObject本质

    目录: NSObject本质 OC对象的分类 isa指针和superclass指针+窥探Class KVO和KVC...

  • 用了这么多次KVO,你真的理解了吗?

    KVO的实现 窥探isa指针 说在前面 KVO作为观察者模式的一种实现,为Cocoa框架中实现Binding的一部...

  • iOS-窥探 KVO 本质

    KVO的实现方式 KVO 是我们日常开发经常用到的技术,关于 KVO 的实现相信大家也都有一定的了解,我们来看下苹...

  • KVO基本使用

    分三部分解释KVO一.KVO基本使用二.KVO原理解析三.自定义实现KVO 一、KVO基本使用 使用KVO,能够非...

网友评论

      本文标题:三.KVO窥探

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