zoukankan      html  css  js  c++  java
  • 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
    {
    
    }
    将来的你会感谢今天如此努力的你! 版权声明:本文为博主原创文章,未经博主允许不得转载。
  • 相关阅读:
    剑指offer的前16题-java版
    JAVA基本数据类型所占字节数是多少?(32位系统)
    二叉树的镜像
    阿里简历问题
    javaSE基础总结
    小心情
    九九乘法表-for循环和while循环
    Python PEP8 编码规范及中文版
    比大小和猜数字
    猜拳游戏
  • 原文地址:https://www.cnblogs.com/chglog/p/4666102.html
Copyright © 2011-2022 走看看