KVO观察者的注册、响应、清除对象

addObserver:forKeyPath:options:context:各个参数的作用分别是什么?observer中需要实现哪个方法才能获得KVO回调?

observeValueForKeyPath:ofObject:change:context:各个参数的作用又分别是什么?

最后观察者如何清除?



注册观察者对象


- (void)addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(void *)context;

e.g: [deviceManager addObserver:logViewDisplay forKeyPath:@"logMessage" options:NSKeyValueObservingOptionNew context:nil];

/**

1)  deviceManager为被观察者

1)  logViewDisplay: 观察者对象.其必须实现方法observeValueForKeyPath:ofObject:change:context:.

2)  logMessage: 被观察的属性,其不能为nil.

3)  options: 设定通知观察者时传递的属性值,是传改变前的呢,还是改变后的,具体的设定可以这儿:

通知变化的具体值为:(NSKeyValueObservingOptionNew, NSKeyValueObservingOptionOld, 和NSKeyValueObservingOption

4)  context: 一些其他的需要传递给观察者的上下文信息,通常设置为nil

*/


被观察者的响应

该方法由被观察者调用后必须在被观察者类中实现下面方法,完成对属性的响应

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context

{

           LogMessage *logMsg = [change objectForKey:@"new"];

           [self showMessage:logMsg];

}

/**

* keyPath : 被观察的属性,其不能为nil

* object  : 被观察者的对象

* change  : 属性值,根据上面提到的Option设置,给出对应得属性值

*  context : 上面传递的context对象

*/


取消观察者的注册

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

观察者还需要知道被观察对象的生命周期,因为在销毁发送者对象之前,需要取消观察者的注册。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容