美文网首页
KVO的本质

KVO的本质

作者: 我真的不是张亮 | 来源:发表于2018-08-07 21:08 被阅读12次

1、如果你给一个Person实例添加KVO,那么这个实例的的isa指针指向的是派生出来了NSKVONotification_Person类对象,折耳根类对象是Runtime动态创建出来的,只要添加了KVO就会创建,他只是Person的一个子类,NSKVONotification_Person的superclass指向的还是Person这个类

2、NSKVONotification_Person中重写了你监听属性的set方法,这个set方法调用了NSSetInt(XXX类型而已)ValueAndNotify方法

3、NSSetInt(XXX类型而已)ValueAndNotify方法的实现

[self willChangeValueForKey];

[super setAge:age];//调用父类的set方法

[self didChangeValueForKey];

4、didChangeValueForKey 这个方法会调用监听起的observeValueForkeyPath方法

5、派生类NSKVONotification_Person中除了有重写setAge方法,还有dealloc  classs  _isKVO 方法

KVO的本质

1、利用Runtime给对象的类添加一个NSKVONotification_XXX的派生类,并且让这个实例对象的isa指针指向这个派生类

2、当被监听的属性发生改变时,会通过实例的isa指针找到这个派生类,调用派生类里面的set方法

3、派生类中的set方法调用了NSSetXXXValueAndNotify方法

4、NSSetXXXValueAndNotify这个方法中又调用了

willChangeValueForKey

[super setXXX:]

didChangeValueForKey;

5、didChangeValueForKey中又调用了observer的observerValueForKeyPayh方法

手动触发KVO

可以自己手动调用willChangeValueForKey 和 didChangeValueForKey

直接诶修改成员变量的值(person->age = 10),是不会掉用KVO的,因为没有调用set方法,如果你要能够监听到KVO,那么你需要手动调用willChangeValueForKey 和 didChangeValueForKey

相关文章

  • Objective-C的本质(4)—— KVO本质

    参考:iOS底层原理总结 - 探寻KVO本质iOS-KVO本质 问题一:kvo如果找到对应的属性 KVO不存在查找...

  • iOS原理篇(一): KVO实现原理

    KVO实现原理 什么是 KVO KVO 基本使用 KVO 的本质 总结 一 、 什么是KVO KVO(Key-Va...

  • 深入理解KVO

    iOS | KVO | Objective-C KVO的本质是什么,如何手动触发KVO? 1.什么是KVO KVO...

  • 04. KVO使用,原理,本质

    问题 KVO日常使用 KVO原理(KVO本质是什么) 如何手动触发KVO 直接修改成员变量会触发KVO吗 KVO图...

  • KVO

    0:KVO的使用步骤 1:KVO本质 methodForSelector方法 NSKVONotifying_Per...

  • 探索中的KVO

    探索KVO的本质 什么是KVO KVO的全称就是Key-Value Observing ,俗称“键值监听”。用于监...

  • iOS KVO

    什么是KVO KVO俗称“键值监听”,用来监听某个对象属性值的改变 KVO的使用 KVO 本质 在给某个对象添加K...

  • iOS-KVO本质

    参考篇:iOS-KVO浅谈 前言:本文简述KVO本质,如有错误请留言指正。 什么是KVO? KVO的全称是Key-...

  • 03-OC中KVO的底层原理

    KVO本质 什么是KVO? KVO:Key-Value Observing,用来监听类的某个对象的某个属性的值发生...

  • 小码哥底层原理笔记:KVO的本质

    使用KVO主要是监听属性的变化。简单的KVO如下: KVO的本质 当我们给person1增加KVO后修改age的值...

网友评论

      本文标题:KVO的本质

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