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;
  • 相关阅读:
    [Java]内部类
    [Java]项目经验之谈
    [IDE]Netbeans
    [HTML5游戏开发]开发者如何真正的面向HTML5平台开发游戏?
    [HTML5游戏开发]两款很棒的 HTML5 游戏开发工具
    [HTML5游戏开发]HTML5游戏让你惊喜吗?
    How To Design A Mobile Game With HTML5
    [WebSimpleDB]HTML5之IndexedDB使用详解
    [HTML5]WAI-ARIA介绍
    [MiniPro]Android GPS-从上到下整个框架剖析与案例解说
  • 原文地址:https://www.cnblogs.com/jisa/p/9183961.html
Copyright © 2011-2022 走看看