Ios自己面试总结面试

KVO

2016-04-18  本文已影响443人  dididududididu

key - value - observer 观察者观察的是属性是否执行了setter方法、或者是否使用了KVC赋值,只要有赋值的动作就会执行KVO的回调方法。如果赋值没有通过setter方法或者KVC,例如:_name = @"新值",这时不会触发kvo的回调方法

    //第一个参数observer:观察者 (这里观察self.view对象的属性的变化)
    //第二个参数keyPath:被观察的属性名称(这里观察self.view背景颜色的改变)
    //第三个参数options:观察属性的新值、旧值等的一些配置(枚举值,这里用来监听改变时的新值)
    //第四个参数context:上下文,可以为kvo的回调方法传值
    //注册观察者
    [self.view addObserver:self forKeyPath:@"backgroundColor" options:NSKeyValueObservingOptionNew context:nil];
//参数解释
//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]
          }
}
上一篇下一篇

猜你喜欢

热点阅读