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"];

    }

  • 相关阅读:
    Restful API 指南
    git submodule 使用小结
    git 在 A 项目中引用 B 项目
    Error Permission denied when running brew cleanup
    @Scope注解设置创建bean的方式和生命周期
    spring常用注解
    Spring的AOP配置文件和注解实例解析
    java线程的状态
    java线程执行的优先级
    java创建线程的方法
  • 原文地址:https://www.cnblogs.com/wukun168/p/6010803.html
Copyright © 2011-2022 走看看