美文网首页
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观察者的注册、响应、清除对象

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