• 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;
  • 相关阅读:
    嵌入式框架Zorb Framework搭建五:事件的实现
    C#网络编程系列文章(五)之Socket实现异步UDP服务器
    C#SocketAsyncEventArgs实现高效能多并发TCPSocket通信 (服务器实现)
    C#中的ManagementClass类
    Etcd v3备份与恢复
    kubernetes调度重平衡工具 Descheduler
    K8S – 优化dns解析时间
    kubernetes备份和恢复
    Coredns部署更新
    认识Kubernetes Descheduler
  • 原文地址:https://www.cnblogs.com/jisa/p/9183961.html
Copyright © 2020-2023  润新知