首页 > 代码库 > OC-KVC
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的缺点:在进行运算的时候,数组里面的放着的应该是同一个类的实例成员;
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。