iOS深入原理

KVO的实现原理

2021-01-10  本文已影响0人  喜剧收尾_XWX

一、底层实现步骤

需求:观察对象Person,观察属性name

  1. 利用runtime动态创建(objc_allocateClassPairPerson_A 类,继承自Person
  2. 设置Person对象的指针指向Person_A
  3. 检测Person_A的方法列表methodList中是否有setName:方法,如果没有就动态添加(class_addMethod)重写的setter方法。
  4. kvo_setter方法中利用setter方法取出getter方法,并获得旧值。
  5. kvo_setter中通过objc_msgSendSuper发送新的value值
  6. 在给Person_A添加观察者时候会动态创建(objc_setAssociatedObjectObservers对象的数组,每个数组的元素中包含观察对象、观察属性、新旧值等信息
  7. Person_A的setter方法里会进行异步回调,通知观察者
  8. Person某个属性移除观察时,则在Observers中移除该条记录。

二、手动实现一个kvo

上代码:https://gitee.com/XingweixinJoker/objc-kvo.git

上一篇下一篇

猜你喜欢

热点阅读