iOS开发精华开发技巧iOS开发

KVO的使用和底层实现原理

2016-10-19  本文已影响104人  Simba_LX

1.什么是KVO

KVO是Key-Value-Observing的缩写,通过KVO这种机制对象可以通过它得到其他对象的某个属性的变更通知。这种机制在MVC模式下显得更为重要,KVO可以让视图对象经过控制器观察模型对象的变更从而做出更新等操作。

2.KVO的使用

/** 
* 1. self.person:要监听的对象 
* 2. 参数说明: 
* @param addObserver 观察者,负责处理监听事件的对象 
* @param forKeyPath 要监听的属性 
* @param options 观察的选项(观察新、旧值,也可以都观察) 
* @param context 上下文,用于传递数据,可以利用上下文区分不同的监听 
*/
[self.person addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:@"Person Name"];

/**
 *  当监控的某个属性的值改变了就会调用
 *
 *  @param keyPath 监听的属性名
 *  @param object  属性所属的对象
 *  @param change  属性的修改情况(属性原来的值`oldValue`、属性最新的值`newValue`)
 *  @param context 传递的上下文数据,与监听的时候传递的一致,可以利用上下文区分不同的监听
 */
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    NSLog(@"%@对象的%@属性改变了:%@", object, keyPath, change);
}

/**
*   移除KVO监听
*/
-(void)dealloc{
    [self.person removeObserver:self forKeyPath:@"name"];
}

3.KVO的使用场景

KVO主要用于用户界面交互,当多个View共同使用了同一个实体,当这个实体中的某个属性改变时,如果需要更新多个界面,KVO的作用就发挥出来了。

4.KVO的底层实现原理

1429890-b28e010d3a7dbdb8.png

5.KVO的缺陷

上一篇下一篇

猜你喜欢

热点阅读