zoukankan      html  css  js  c++  java
  • KVC, KVO

    KVC (Key-Value Coding)键值编码。

    即是NSKeyValueCoding 一个非正式的Protocol,提供了一种间接访问对象属性的机制。

    作用:设置属性值

    1     [self setValue:@"" forKey:@""];
    2     //可以通过点语法来赋值(跨层级)
    3     [self setValue:@"" forKeyPath:@"key.key"];

            获取属性值

    1     [self valueForKey:@""];
    2     /// 获取属性值,可以跨层级获取
    3     [self valueForKeyPath:@"key.key"];

           将字典转化为模型

    1 //用字典对实例进行赋值
    2 [p setValuesForKeysWithDictionary:dic];
    3 // 在model要实现的方法。
    4 - (void)setValue:(id)value forUndefinedKey:(NSString *)key {
    5     //外部没有定义的属性。不实现的话,遇到外部没有定义的Key会Crash
    6 }

    KVO(Key-Value Observing)键值观察者

    KVO建立在KVC之上,他能够观察一个对象的KVC Key Path的值的变化。

    原理:在注册观察者时,系统会在运行时生成一个派生类,派生类重写了该对象的setter方法,并且在setter方法中实现了通知机制。同时派生类重写了class方法,以欺骗外部调用者,系统将该类的isa指针指向派生类,因此该对象就是派生类的新对象了,因此会调用该对象的setter就相当于调用派生类的setter,从而激活键值通知机制。还重写了dealloc方法来释放资源。

    主要使用的是三个方法

            /// 添加观察者
            - (void)addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(nullable void *)context;
            /// 监听到值改变
            - (void)observeValueForKeyPath:(nullable NSString *)keyPath ofObject:(nullable id)object change:(nullable NSDictionary<NSKeyValueChangeKey, id> *)change context:(nullable void *)context;
            /// 移除观察者,便面内存泄漏
            - (void)removeObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath;
  • 相关阅读:
    LeetCode OJ 112. Path Sum
    LeetCode OJ 226. Invert Binary Tree
    LeetCode OJ 100. Same Tree
    LeetCode OJ 104. Maximum Depth of Binary Tree
    LeetCode OJ 111. Minimum Depth of Binary Tree
    LeetCode OJ 110. Balanced Binary Tree
    apache-jmeter-3.1的简单压力测试使用方法(下载和安装)
    JMeter入门教程
    CentOS6(CentOS7)设置静态IP 并且 能够上网
    分享好文:分享我在阿里8年,是如何一步一步走向架构师的
  • 原文地址:https://www.cnblogs.com/jisa/p/9183961.html
Copyright © 2011-2022 走看看