KVO(键值观察者)
什么是KVO,KVO的实现机制是什么?
- KVO就是键值观察者,是观察者设计模式的实现
- 使用isa混写(
isa-swizzling
)来实现KVO - 当前类观察A类的某一个属性时,系统在运行时将A类的isa指针指向了一个新的系统生成的类NSKVONotifying_A类,并在该类中重写setter方法(
此句就是isa-swizzling混写技术在KVO中是如何实现的答案
),系统新创建的NSKVONotifying_A类是原来A类的子类
setValue: forKey:
方法 和setObject:forKey:
方法的区别
- KVO通过何种方式能生效?
- 为什么KVO通过KVC的方法能生效?
- 通过setter方法能够触发KVO;
通过KVCsetValue:forKey:
方法能够触发KVO
通过成员变量直接赋值不能触发KVO,但可以手动添加KVO的俩个方法才会生效 - 因为KVC是通过调用了重写的setter方法,所以KVC能触发KVO
手动KVO是怎么样的?
- 就是在使用成员变量进行赋值,在赋值前后分别添加俩个方法,即
willChangeValueForKey:
didChangeValueForKey:(会触发kvo回调)
KVC(键值编码)
-(id)valueForKey:(NSString*)key
-(void)setValue:(id)value ForKey:(NSString*)key
- 如果知道某一类的私有成员变量的名称,就可以通过KVC进行值修改,因此违背了面向对象思想的
-(id)valueForKey:(NSString*)key
实现流程
-(void)setValue:(id)value ForKey:(NSString*)key
实现流程