ios kvo 简介

时间:2015-07-08 16:45:14   收藏:0   阅读:155

在一个复杂的,有状态的系统中,当一个对象的状态发生改变,如何通知系统,并对状态改变做出相应的行为是必需考虑的一个问题,在iOS中为这类问题提供了4种解决方法: 

1. NSNotifiactaion和NSNotificationCenter:通知中心 
2. Delegates:代理, 
3. Callback:回调, 
4. KVO(Key-Value Observing):键值观察 

这篇文章就来说说通过KVO通知系统状态发生改变的用法。 

KVO是什么? 
KVO是Object-C中定义的一个通知机制,其定义了一种对象间监控对方状态的改变,并做出反应的机制。对象可以为自己的属性注册观察者,当这个属性的值发生了改变,系统会对这些注册的观察者做出通知。其用途十分广泛,比方说,你的下载进度条是根据下载百分比决定的,那么,可以通过观察下载百分比的改变,刷新进度条的样式,来直观的反应下载进度等等。 

KVO的用法 
根据上面的描述,一个KVO的用法主要就涉及3个部分: 

1.为对象的属性注册观察者:对象通过调用下面这个方法为属性添加观察者 

Object-c代码  技术分享

  1. - (void)addObserver:(NSObject *)observer  

  2.          forKeyPath:(NSString *)keyPath  

  3.             options:(NSKeyValueObservingOptions)options  

  4.             context:(void *)context  

            



2.观察者接收通知,并做出处理:观察者通过实现下面的方法,完成对属性改变的响应: 

Object-c代码  技术分享

  1. - (void)observeValueForKeyPath:(NSString *)keyPath  

  2.                       ofObject:(id)object  

  3.                         change:(NSDictionary *)change  

  4.                        context:(void *)context  



                
                  
3.清除观察者:对象通过下面这个方法移除观察者: 

Object-c代码  技术分享

  1. - (void)removeObserver:(NSObject *)anObserver forKeyPath:(NSString *)keyPath  



4. 注意事项: 
使用KVO消息传递机制有两个要求:(1)观察者必须知道被观察对象,即在同一作用域。(2)观察者还需要知道被观察对象的生命周期,因为在销毁发送者对象之前,需要取消观察者的注册。 
另外:如果计划在Core Data对象上使用KVO,需要知道这跟一般的KVO使用方法有点不同。还必须结合Core Data的故障机制(faulting mechanism),一旦core data出现了故障,它将会触发其属性对应的观察者(即使这些属性值没有发生改变)。 

5. 一些好的实践 

参考文章:http://ningandjiao.iteye.com/blog/2009729

原文:http://my.oschina.net/u/2331935/blog/476148

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!