zoukankan      html  css  js  c++  java
  • KVO: key value observing

    /**

     *   KVO: key value observing

     观察者模式,和通知中心类似.

     当指定对象的属性发生变化时,对象就会收通知,

     使用:

     1.添加观察者

     2.使用回调方法

     3.触发回调方法.

     4.移除观察者.

     */

     //1.注册观察者

        /**

         *addObserver:self forKeyPath:@"title" options:NSKeyValueObservingOptionNew context:nil

         参数1:观察者对象

         参数2:被观察者的属性

         参数3:选项设置

               Old 获取变化之前的旧值;

               New 获取变化之后的新值;

               Initial 即使赋值操作,添加观察者之后,仍会触发一次观察者的方法.

              Prior 每次属性发生变化,会触发两次,变化之前和变化之后各触发一次.变化之前的字典中会有一个notificationIsPrior键值对,变化之后没有该键值对.

         参数4:可用于传值.

         */

        [self.aMovie addObserver:self forKeyPath:@"title" options:NSKeyValueObservingOptionNew context:nil];

      #pragma mark -KVO 自动回调方法-

    -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context{

        //change 中的kind有1,2,3,4.  1针对赋值,2,3,4针对集合类(数组,字典,集合)的插入,删除,替换,

        //一个被观察者可以添加多个观察属性,可通过keyPath做以区分.

        if ([keyPath isEqualToString:@"title"]) {

            NSLog(@"%@",change[NSKeyValueChangeNewKey]);

        }else if ([keyPath isEqualToString:@"type"]){

               NSLog(@"%@",change);

        }

    }

    //当不需要使用观察者时  移除观察者.

    -(void)dealloc{

        [self.aMovie removeObserver:self forKeyPath:@"title"];

        [self.aMovie removeObserver:self forKeyPath:@"content"];

    }

  • 相关阅读:
    排序算法分析
    Android学习之DragEvent
    Android Studio导出Jar包
    Android中的一些基础知识(三)
    Android中的一些基础知识(一)
    Android中的一些基础知识(二)
    Android学习之Drawable(一)
    Android消息机制之Handler
    Android滑动事件冲突
    Android创建窗口(一)创建应用窗口
  • 原文地址:https://www.cnblogs.com/wukun168/p/6010803.html
Copyright © 2011-2022 走看看