美文网首页
手动实现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解析

    手动实现KVO解析 PS:原链接没找到,侵立删~ 实现原理: 带注释的Demo

  • KVO 解析

    KVO解析(一) —— 基本了解KVO解析(二) —— 一个简单的KVO实现KVO解析(三) —— KVO合规性K...

  • iOS面试题0004-KVC和KVO的keyPath一定是属性么

    KVC 支持实例变量,KVO 只能手动支持手动设定实例变量的KVO实现监听

  • iOS面试题(4) KVO KVC

    声明,不是原创,笔记均来自 群主大神~ 手动实现KVO 什么是KVO和KVC? KVO内部实现原理 NSNotif...

  • Key-Value-Observing OC&Swift

    KVC 支持实例变量,KVO 只能手动支持手动设定实例变量的KVO实现监听。KVO通过set方法来通知。或者KVC...

  • 手动实现KVO

    1 首先根据key 生成Set方法 2 检测observer 检测set方法 是否存在 不存在抛出异常 3 根绝当...

  • 手动实现KVO

    前言 之前只是了解KVO的原理,但是从未自己手动实现过KVO,主要是因为之前对runtime的操作函数没有那么熟练...

  • 手动实现KVO

    继承自NSObject的对象都会自动带有KVO,以下手动实现非继承自NSObject类的KVO。 以下翻译自苹果官...

  • 手动实现KVO

    步骤:1.生成一个Person类的子类 NSKVONotifying_Person2.使当前对象的isa指向新的类...

  • KVO和手动调用KVO

    参考链接: http://tech.glowing.com/cn/implement-kvo/ 手动实现KVO 1...

网友评论

      本文标题:手动实现KVO解析

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