KVO与KVC

KVO

KVO(key-value-observing)

  • 系统对观察者设计模式的一种实现
  • 通过运行时的ISA-Swizzling技术实现

使用到的主要方法有

1
2
3
4
5
6
7
8
9
10
11
//动态创建类
objc_allocateClassPair

//动态添加方法
class_addMethod

//注册类
objc_registerClassPair

//isa-swizzling
object_setClass

KVC

KVC(key-value-coding)

valueForKey执行流程

访问器方法是否存在的判断标准(假设valueForKey中传入的key为@”name”)

  • getName
  • name
  • isName

如果别观察对象中实现了上面三个方法,那么valueForKey:@"name"方法时就会调用到上面的三个方法,如果三方法都存在只调用其中的一个方法,优先级就是上面的顺序。

实例变量是否存在的判断标准是

类中定义字段名 valueForKey中传入的key的名称
name name
_name name 或 _name
isName name 或 isName
_isName name 或 _isName 或 isName

setValueForKey执行流程

setter方法的判断标准是

是否实现了setNamesetIsName

验证的demo从这里下载。