美文网首页
KVO观察者的注册、响应、清除对象

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

作者: wayne0207 | 来源:发表于2017-11-04 09:47 被阅读0次

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

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

相关文章

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

    addObserver:forKeyPath:options:context:各个参数的作用分别是什么?obser...

  • KVO初探

    最好的学习文档是 KVO苹果官方文档 KVO三步曲 添加观察者 observer:注册KVO通知的对象。观察者必须...

  • RXSwift笔记

    观察者模式:KVO、通知 被观察者:发出一个事件 观察者/订阅者:对被观察者对象进行响应 RXSwift:把程序中...

  • 聊一聊KVO

    kvo具体的实现过程 1.首先只能作用于属性2.要注册观察者 注册观察者之后,instance对象有什么变化? 同...

  • KVO浅析

    KVO Key-Value Observing 键值监听 KVO是一个观察者模式。观察一个对象的属性,注册一个指定...

  • KVO & 通知

    KVO:提供一种机制,当指定的被观察的对象的属性被修改后,KVO会自动通知响应的观察者(KVC - 键值编码 是K...

  • KVO,KVC

    一. KVO是键值观察,是Objective-C对观察者模式的实现,每次当被观察者对象的某个属性值发生改变时,注册...

  • 15:KVO (上) —— 使用篇

    KVO 3个步骤 (自动调用) 对对象自动调用 控制台打印↓ 三个步骤:注册观察者。 person对象说:self...

  • iOS崩溃处理机制:KVO Crash

    KVO Crash,通常是KVO的被观察者dealloc时仍然注册着KVO导致的crash,添加KVO重复添加观察...

  • iOS·子父类同时实现KVO响应方法时的执行顺序

    研究对象 一个基类 一个子类 设置背景 下面针对同一个被观察者对象及被观察keyPath 基类中注册KVO观察者 ...

网友评论

      本文标题:KVO观察者的注册、响应、清除对象

      本文链接:https://www.haomeiwen.com/subject/jkkfmxtx.html