美文网首页
手动实现KVO解析

手动实现KVO解析

作者: 莫道别离伤 | 来源:发表于2015-09-18 13:52 被阅读360次

    手动实现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解析

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