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的缺点:在进行运算的时候,数组里面的放着的应该是同一个类的实例成员;