• iOS开发——UI基础-KVO


    KVO == Key Value Observing

    作用: 可以监听某个对象属性的改变

    一、使用KVO

        Person *p = [Person new];
        p.name = @"chg";
        p.age = 30;
        // 给p这个对象添加一个监听 , 监听p对象的age属性的改变, 只要age属性改变就通知self
        [p addObserver:self forKeyPath:@"age" options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew context:nil];

         第一个参数: 告诉系统哪个对象监听

         第二个参数: 监听当前对象的哪个属性

         第三个参数: 监听到属性改变之后, 传递什么值

         第四个参数: 需要传递的参数 (这个参数不是传递给属性的)

          注意: 如果使用KVO监听某个对象的属性, 当对象释放之前一定要移除监听

      否则会报错:

          reason: 'An instance 0x7f9483516610 of class Person was deallocated while key value observers were still registered with it.

         注意: KVO只能监听通过set方法修改的值

        // 从p对象上移除self对它的age属性的监听
        [p removeObserver:self forKeyPath:@"age"];

    二、KVO原理

         只要给一个对象注册一个监听, 那么在运行时, 系统就会自动给该对象生成一个子类对象, 

         并且重写自动生成的子类对象的被监听属性的set方法, 然后在set方法中通知监听者

    // 只要监听到属性的改变就会调用
    // keyPath: 被监听的属性名称
    // object : 被监听的对象
    // context: 注册监听的时候传入的值
    - (void)observeValueForKeyPath:(nullable NSString *)keyPath ofObject:(nullable id)object change:(nullable NSDictionary *)change context:(nullable void *)context
    {
    
    }
    将来的你会感谢今天如此努力的你! 版权声明:本文为博主原创文章,未经博主允许不得转载。
  • 相关阅读:
    练习jQuery
    Highcharts的应用步骤
    CSS中的数量查询
    何时使用 Em 与 Rem
    不错的教学网站
    HTML5中新增的语义化标签,及在IE5.5~9(IE9已经开始支持部分HTML5新标签了)支持这些新标签的兼容性处理。
    【洛谷P4139】上帝与集合的正确用法
    【洛谷P1357】花园
    【洛谷P1939】矩阵加速(数列)
    【洛谷P1962】斐波那契数列
  • 原文地址:https://www.cnblogs.com/chglog/p/4666102.html
Copyright © 2020-2023  润新知