KVC:
KVC是 key - Value - Coding的缩写
意思是用key和Value来编写代码,核心思想是对象均由很多个key组成,把对对象的操作全部落实到key上。
我们写的OC对象都有自己的实例变量(有可能随属性自动附带),KVC指的是,不通过setter和getter方法来获取实例变量的值,而是用实例变量的名字来获取值。
听起来是不是很酷?
其实就是换了一种取值和赋值的方法。这样说听着应该更直观。
但也不能说没有他的特点:
KVC不仅能代表setter和getter方法,还能无视readonly标记的属性,如果这个属性是有同名实例变量,并且它是readonly,那么kvc既可无视只读来实现修改该属性。
以下,是KVC的常用用法:
// 设置值
[obj setValue:value forkey:@"key"];
[obj setValue:value forkeyPath:@"key.subkey.subSubkey"];
//取值
[obj valueForkey:@"key"];
[obj valueForKeyPath:@"key.subKey.subSubKey"];
//如果subKey对应一个对象,该方法可以获取该对象的subSubKey的值
[obj vlaueForKeyPath:@"keys.subKey"];
//如果keys是一个数组,该方法可以提取数组中每一个成员的subkey的值合成一个新的数组返回出来
[obj vlaueForKeyPath:@"keys.@sum.valueKey"];
//如果keys是一个数组,则可以提取所有valuekey的值加起来返回
[obj valueForkeyPath:@"keys.@avg.valueKey"];
//如果keys是一个数组,则提取所有valuekey的值取平均数返回