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

    }

  • 相关阅读:
    Mvc+三层(批量添加、删除、修改)
    js中判断复选款是否选中
    EF的优缺点
    Git tricks: Unstaging files
    Using Git Submodules
    English Learning
    wix xslt for adding node
    The breakpoint will not currently be hit. No symbols have been loaded for this document."
    Use XSLT in wix
    mfc110ud.dll not found
  • 原文地址:https://www.cnblogs.com/wukun168/p/6010803.html
Copyright © 2011-2022 走看看