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

    }

  • 相关阅读:
    20145206 《信息安全系统设计基础》第3周学习总结
    20145206 《信息安全系统设计基础》第2周学习总结
    Alpha 冲刺 (3/10)
    Alpha 冲刺 (2/10)
    Alpha 冲刺 (1/10)
    福大软工 · 第七次作业
    福大软工 · 第八次作业(课堂实战)- 项目UML设计(团队)
    福大软工1816 · 第六次作业
    福大软工1816 · 第五次作业
    福大软工1816 · 第四次作业
  • 原文地址:https://www.cnblogs.com/wukun168/p/6010803.html
Copyright © 2011-2022 走看看