• OC KVC


    OC KVC


    KVC 全称 key valued coding 键值编码

    在说KVC之前应该简单的了解一下反射机制

    反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法.
    对于任意一个对象,都能够调用它的任意一个方法和属性.
    JAVA,C#都有这个机制.
    ObjC也有,所以你根部不必进行任何操作就可以进行属性的动态读写,那就是KVC.
    KVC的操作方法由NSKeyValueCoding提供,而他是NSObject的类别,也就是说ObjC中几乎所有的对象都支持KVC操作.

    常用方法

    获取值的方法

    • valueForKey:,传入NSString属性的名字.
    • valueForKeyPath:,传入NSString属性的路径.xx.xx形式.
    • valueForUndefinedKey:,它的默认实现是抛出异常,可以重写这个函数做错误处理.

    修改值的方法

    • setValue:forKey:
    • setValue:forKeyPath:
    • setValue:forUndefinedKey:

    setValue:forKey的搜索过程:

    1. 首先搜索的是@property自动生成的setter方法.格式为(set).
    2. 如果没有搜索到将会搜索程序员手写的setter方法.手写setter的方法原因可能是@synthsize的使用;也可能是没有使用@property自动合成属性,只是声明了成员变量然后手写setter.
    3. 当没有找到任何setter的方法之后,如果类方法accessInstanceVariablesDirectly返回YES(注:这是NSKeyValueCodingCatogery中实现的类方法,默认实现为返回YES)那么按_,_is,is的顺序搜索成员名.
    4. 如果还是没有找到设置成员的值,就会调用setValue:forUndefinedKey:.
    5. 如果没有重写setValue:forUndefinedKey程序会马上崩溃.

    注意

    1、使用KVC间接修改对象属性时,系统会自动判断对象属性的类型,并完成转换.
    2、KVC可以访问成员变量,无论是否提供getter/setter方法,无论可见性是怎样,是否有readonly修饰.

    KVC主要应用

    setValue:forUndefinedKey与valueForUndefinedKey的应用

    KVC的主要用途是将dictionary转换成model,但有些服务器返回的字段有可能是oc的关键字比如 ‘id’ , ’description’等.我们无法让@property后面key值为id,于是使用大写的ID代替,KVC是区分大小写的我们不用担心。这时我们只需在setValue:forUndefinedKey:把id的key值赋值给ID的key值,就可以避免关键字的尴尬。

    dict<->model互转

    字典转模型
    [self setValuesForKeysWithDictionary:dict];
    模型转字典
    [p dictionaryWithValuesForKeys:array];

    KVC集合

    NSArray/NSSet等都支持KVC.
    [array valueForKeyPath:@"dog.name"];

    使用KVC计算属性

    格式为:[p valueForKeyPath:@"Left keypath部分.@Collectionoperator部分.Right keypath部分”];
    Left keypath部分:需要操作对象路径。
    Collectionoperator部分:通过@符号确定使用的集合操作。
    Right keypath部分:需要进行集合操作的属性。
    举例:[p valueForKeyPath:@"books.@sum.price"];
    @avg:平均值
    @count:总数
    @max:最大
    @min:最小
    @sum:总数

  • 相关阅读:
    线程应用示例
    Microsoft Visual Studio 2005 BETA2最新资源大杂烩
    135,139,445端口的关闭方法
    开源软件新时代 55个经典开源Windows工具
    图书商城项目总论
    无处不在的XML
    ADO.NET实例教学一
    递归
    手写代码生成器
    数据库的应用详解三
  • 原文地址:https://www.cnblogs.com/xubaoaichiyu/p/5503129.html
Copyright © 2020-2023  润新知