• OC-KVC


    1、KVC:Key Value Coding 键值编码(键值路径)

    作用:对象实例可以在类的外部对成员变量进行访问和赋值(就算成员变量是private也可以)
    举例:有一个Book类:private :_name; Author *_author;
                      Author类:private:_name;
    定义一个Book类的实例 book
    //KVC的实现原理,系统会自动在类里面找_name的成员变量,如果没有那么就会找名叫name的成员变量
    //KVC有一个缺点就是后面的key值如果写错了,程序在编译的阶段不会报错,但到了程序运行的时候会直接崩掉
    [book setvalue: @“中国上下五千年” forKey @“_name”];
    上面的就相当于是setter方法
    [book valueForKey :@“_name”];
    上面的就相当于是getter方法
     
    还可以通过路径的方式获得成员变量(对象)的成员变量
    [book setValue:@“老舍” forPath @“_author.name”];
    提问:如果Author的name属性是private,并且没有get、set方法,那还可以进行访问么?
    回答:通过路径访问的时候,_author.name,并不是点语法,只是一个路径,所以没有get、set方法也照样可以获得想要的值
     
    KVC还可以通过字典批量给类的成员属性赋值,前提是字典里的键值跟类的属性名一样;
    [book setValuesForKeys:dict];
     
    KVC一对多关系
    现有一个数组:arr 里面有三个对象:book1、book2、book3
    [book valueForKeyPath:arr._name];这个方法返回这三本书作者的name;还可以这样[arr valueForKeyPath:_name];通过数据拿到里面书的所有作者,返回一个数组;这两个方法消息的接收对象和路径不一样而已
    2、KVC的简单运算
    sum、min、max、avg、count
    举例:有一个Book类:private :_name; Author *_author;CGFloat _price;
                      Author类:private:_name;
    定义三个Book类的实例 book1、book2、book3,现用一个数组arr来接收这三个对象;
    NSNumber *count = [book valueForKeyPath:@“arr.@count”]//计算数组成员的个数
    NSString *sum = [book valueForKeyPath:@“arr.@sum._price”];//计算总价格
    NSString *avg = [book valueForKeyPath:@“arr.@avg._price”];//计算平均价格
    NSString *max = [book valueForKeyPath:@“arr.@max._price”];//计算最高价格
    NSString *min = [book valueForKeyPath:@“arr.@min._price”];//计算最低价格
    KVC的缺点:在进行运算的时候,数组里面的放着的应该是同一个类的实例成员;
  • 相关阅读:
    实现RHEL下KVM虚拟化
    SELinux安全扩展
    配置用户和组信息
    系统级计划任务
    syslog系统日志服务
    VNC远程连接,虚拟网络计算
    系统初始化
    备份与还原文件系统
    使用对象在方法间共享属性
    Python中*和**的使用
  • 原文地址:https://www.cnblogs.com/bluceZ/p/3854276.html
Copyright © 2020-2023  润新知