KVC Key Value Coding
是一种可以直接通过字符串的名字(key)来访问类属性的机制。
通过KVC,可以获取不存在getter方法的对象值,
无需通过对象指针直接访问。
valueForKey: 和
setValue: forKey: 如若对象的实例变量为基本数据类型时,我们需要对数据进行封装。
路径:
valueForKeyPath: 和
setValue: forKeyPath:
除了通过键设置值外,键/值编码还支持指定路径,像文件系统一样,
用“点”号隔开。
KVC查询类属性的顺序:
①检查是否存在
-<key>
、
-is<key>
(只针对布尔值有效)或者
-get<key>
的访问器方法,如果有可能,就是用这些方法返回值;
检查是否存在名为
-set<key>:
的方法,并使用它做设置值。对于
-get<key>
和
-set<key>:
方法,将大写
Key
字符串的第一个字母,并与
Cocoa
的方法命名保持一致;
②如果上述方法不可用,则检查名为 -_<key> 、 -_is<key> (只针对布尔值有效)、 -_get<key> 和 -_set<key>: 方法;
③如果没有找到访问器方法,可以尝试直接访问实例变量。实例变量可以是名为: <key> 或 _<key>;
②如果上述方法不可用,则检查名为 -_<key> 、 -_is<key> (只针对布尔值有效)、 -_get<key> 和 -_set<key>: 方法;
③如果没有找到访问器方法,可以尝试直接访问实例变量。实例变量可以是名为: <key> 或 _<key>;
一对多的关系:
如果向NSArray请求一个键值,它实际上会查询你数组中得每个对象来查找这个键值,然后将查询结果打包到另一个数组中并返回给你。
KVC的简单运算:
只有这五个方法。返回的是对象,NSNumber.
集合运算符是一个特殊的Key Path,可以作为参数传递给valueForKeyPath:方法,
注意只能是这个方法
,如果传给了valueForKey:方法保证你程序崩溃。
KVC的运算可以直接对数组对象做求和等运算
KVC
优点:不用调用和写一堆set、get方法,方便简洁,求平均值,总值什么的很简便。
缺点:key容易写错,写错就崩溃。