KVO的简单认识

KVO

概念

  • KVO - key value observer 键值观察web

  • 监听对象属性变化的一种手段,能够用在开源框架,让代码解耦。例如:上拉、下拉刷新控件面试

常见面试题

  • KVO 是同步的仍是异步的?框架

代码演练

  • 添加观察异步

// 添加键值观察/**
 1. 调用对象:要监听的对象

 2. 参数
 1> 观察者,负责处理监听事件的对象
 2> 观察的属性
 3> 观察的选项
 4> 上下文
 */[self.person addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:@"Person Name"];
  • 监听方法spa

// NSObject 分类方法,意味着全部的 NSObject 均可以实现这个方法!// 跟协议的方法很像,分类方法又能够称为“隐式代理”!不提倡用,可是要知道概念!// 全部的 kvo 监听到事件,都会调用此方法/**
 1. 观察的属性
 2. 观察的对象
 3. change 属性变化字典(新/旧)
 4. 上下文,与监听的时候传递的一致

 能够利用上下文区分不一样的监听!
 */- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {    NSLog(@"睡会 %@", [NSThread currentThread]);

    [NSThread sleepForTimeInterval:1.0];    NSLog(@"%@ %@ %@ %@", keyPath, object, change, context);
}

注意事项

  • 监听方法执行会在属性变化所在的线程上执行!线程

  • 若是多个线程同时修改一个属性,可能会出现资源抢夺的问题代理

  • 若是监听的属性多,KVO 的监听方法会很是难写code

对象销毁以前,必定要取消监听server

相关文章
相关标签/搜索