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

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

你可能感兴趣的:(KVO观察者的注册、响应、清除对象)