首先说说KVO/key value observe:
KVO是iOS中一种观察模式,主要用于观察对象属性的变化,当给属性加KVO后 即
p = [[Person alloc]init];
[p addObserver:self forKeyPath:@"age" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];
self 就不多说了 和add target 的一样
KeyPath 指属性的’路径‘ 这里对象p 中有个属性为age 则 ’路径‘就为 'age'
若p对象还有个属性dog dog有个属性为name 那么 如果要观察p 的dog 属性的name 属性 则KeyPath为‘dog.name’
options 则为观察值,这里观察的是新和旧2个值
context 为上下文环境,当有多个对象有同一属性都需要观察时,这里要传个参数进去 以分辨哪个对象一般传个参数用于区分即可 不用时可传nil
,每被观察的属性发生变化时都会调用该方法observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change
其中KeyPath和上文一样 这里不多说
object 为属性发生变化的对象 这里为p
change 里面存有新旧变化值
new = 11;
old = 10;
注意:当使用kvo 时 修改属性的值必须用点语法或者kvc 给对象属性赋值,否则不生效(因为生效前提是对象必须调用set方法赋值)
下面讲一下KVC /Key Value Coding;
KVC可以理解成一种编码格式,
特点是不需要知道属性类别 可以用同一代码对任意属性直接赋值
以上文p为例
[p setValue:@"15" forKey:@"age"];//给p的age 属性赋值
[p valueForKey:@"age"];//取出p属性age 的值
setValue:forKeyPath: 方法中KeyPath 与上文所述keyPath一样