手动实现KVO解析

手动实现KVO解析

PS:原链接没找到,侵立删~

实现原理:

假设被观察者为A类的实例L,实现流程如下:
   1.在运行时,为A类创建一个子类B。 
   2.强行将实例L的类型改为B。
   3.为B类添加新的setter方法。 
   4.为B类添加观察者列表属性M。 
   5.将观察者的信息封装为类放入B类的M。 


  重点在第三项——kvo的setter方法如何写:
  因为是将实例L的类更改为了原类A的子类B,需要调用父类的对应的setter方法。
  由于在整个KVO过程中,观察的属性不一致则setter方法的名字也不一致。无法直接运用super调用,最简单的方法就是通过runtime来实现。
      1. 获得setter方法名 
      2. 根据setter方法名获得对应的setter消息 
      3. 根据setter方法名获得getter方法名 
      4. 根据getter方法名获得被观察属性当前值 
      5. 创建消息传递结构体(为了把setter消息转发给父类) 
      6. 把setter消息转发给父类 
      7. 遍历观察者列表,得到观察者信息,执行操作

带注释的Demo

你可能感兴趣的:(手动实现KVO解析)