KVO
2016-04-18 本文已影响443人
dididududididu
key - value - observer 观察者观察的是属性是否执行了setter方法、或者是否使用了KVC赋值,只要有赋值的动作就会执行KVO的回调方法。如果赋值没有通过setter方法或者KVC,例如:_name = @"新值",这时不会触发kvo的回调方法
- KVO的使用可以分为两步
1.注册观察者
2.在回调方法中监听被观察者属性的变化- 注册观察者
//第一个参数observer:观察者 (这里观察self.view对象的属性的变化)
//第二个参数keyPath:被观察的属性名称(这里观察self.view背景颜色的改变)
//第三个参数options:观察属性的新值、旧值等的一些配置(枚举值,这里用来监听改变时的新值)
//第四个参数context:上下文,可以为kvo的回调方法传值
//注册观察者
[self.view addObserver:self forKeyPath:@"backgroundColor" options:NSKeyValueObservingOptionNew context:nil];
- 在回调方法中监听被观察者属性的变化(当self.view的backgroundColor在某处发生改变则会自动调用该方法)
//参数解释
//keyPath:属性名称
//object:被观察的对象
//change:变化前后的值都存储在change字典中(因为上面布置观察新值)
//context:注册观察者时,context传过来的值
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context{
if([keyPath isEqualToString:@"backgroundColor"]){//View的背景颜色发生了变化
//newColor为改变后的值
id newColor = [change objectForKey:NSKeyValueChangeNewKey]
}
}