陈斌彬的技术博客

Stay foolish,stay hungry

KVC与KVO的一些理解

KVC(key-value-coding,键值编码)

KVC是一种通过字符串去间接操作对象属性的一种机制,例如,访问一个对象的属性person.age时。使用KVC的方式:

[person valueforkey:@"age"];

KVC为OC语言动态运行时机制的一种体现,任何NSObject类型的对象都支持kvc。

KVO(key-value-observer)

KVO就是在一个语言框架层面实现的观察者模式,通过KVC的方式去改变属性时,会主动通知观察者,对符合kvc键值编码的变量的观察,主要对变量赋值操作的观察

[_model addObserver:self forKeyPath:@"price" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];

//键值观察者要实现的函数
//第一个参数 就是监听的 对象属性名
//第二个参数 监听的对象
//第三个参数 改变的内容  如果设置过NSKeyValueObservingOptionNew 就可以获取对象属性的新值
//如果设置NSKeyValueObservingOptionOld 可以获取对象属性的旧值

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
}