zoukankan      html  css  js  c++  java
  • iOS之KVO

    先创建一个person类并定义name和sex属性,当person的name或sex属性发生变化时会执行一个action

    /** * KVO --- Key Value Observe(键值观察者) * KVO 是一种设计模式,属于观察者设计模式 * 观察者设计模式涉及到以下内容:观察者、被观察者、观察的事项 * 工作原理:观察者 观察 被观察者 指定的属性是否发生变化,一旦发生变化,就执行一个action * KVO 是基于 KVC 的,通过keyPath指定需要观察的属性 */ _person = [[Person alloc] init]; // 控制器观察model的变化 // self作为观察者 观察person的name属性的变化 [_person addObserver:self forKeyPath:@"name" options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld) context:Nil]; _person.name = @"zhangsan"; [_person setValue:@"lisi" forKey:@"name"]; [_person addObserver:self forKeyPath:@"sex" options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld) context:Nil]; _person.sex = @"nan"; /** * 总结KVO的四个步骤 * 1 [被观察者 addObserver:观察者 forKeyPath:被观察的属性 options:观察设置 context:参数] * 2 观察者实现 - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context * 3 被观察者属性发生变化 * 4 移除观察者 */

      当person的被观察属性发生变化时会执行下面的方法

    /**
     *  当被观察者被观察的属性发生变化时 执行此方法
     *
     *  @param keyPath 被观察的属性
     *  @param object  被观察者
     *  @param change  变化
     *  @param context ?????????? 还不理解
     */
    - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
    {
        NSLog(@"
    keyPaht%@ 
    object%@ 
    change%@ 
    context%@", keyPath, object, change, context);
    }
    

      

  • 相关阅读:
    (转)eclipse安装jetty
    (转)Java compiler level does not match解决方法
    (转)关于eclipse的TestNG的插件安装方法
    win7 远程桌面连接过程
    (转)IntelliJ IDEA 破解方法
    (转) Eclipse Maven 编译错误 Dynamic Web Module 3.1 requires Java 1.7 or newer 解决方案
    (转)@ContextConfiguration注解说明
    (转)java中/r与/n还有/r/n的区别
    (转)eclipse导入Gradle项目
    tomcat架构分析(valve机制)
  • 原文地址:https://www.cnblogs.com/NatureZhang/p/3718154.html
Copyright © 2011-2022 走看看