一、简介
NSObject类实现的NSKeyValueCoding非正式协议的形式被定义为基础框架的一部分。
从协议的角度来说,KVC本质上是定义了一套让我们去遵守和实现的方法。实现的根本是Objective-C的动态性和runtime,KVC机制离不开访问器方法的实现。
Key-Value-Coding(KVC) 通过键值编码来访问你要存取的类的属性。它提供了一种使用字符串而不是访问器方法去访问一个对象实例变量的机制。
从协议的角度来说,KVC本质上是定义了一套让我们去遵守和实现的方法。实现的根本是Objective-C的动态性和runtime,KVC机制离不开访问器方法的实现。
Key-Value-Coding(KVC) 通过键值编码来访问你要存取的类的属性。它提供了一种使用字符串而不是访问器方法去访问一个对象实例变量的机制。
二、优点
①可以再很大程度上简化代码
②能跟脚本语言很好的配合
三、实现
为了设置或者返回对象属性,KVC按顺序使用如下技术:
①检查是否存在-<key>、-is<key>(只针对布尔值有效)或者-get<key>的访问器方法,如果有可能,就是用这些方法返回值;
检查是否存在名为-set<key>:的方法,并使用它做设置值。对于-get<key>和-set<key>:方法,将大写Key字符串的第一个字母,并与Cocoa的方法命名保持一致;
②如果上述方法不可用,则检查名为-_<key>、-_is<key>(只针对布尔值有效)、-_get<key>和-_set<key>:方法;
③如果没有找到访问器方法,可以尝试直接访问实例变量。实例变量可以是名为:<key>或_<key>;
④如果还是没有找到,则调用valueForUndefinedKey:和setValue:forUndefinedKey:方法。这些方法的默认实现都是抛出异常,我们可以根据需要重写它们。
参考文档:
http://blog.youkuaiyun.com/kesalin/article/details/8194240
相关文档:
http://blog.youkuaiyun.com/kesalin/article/details/8194240 [深入浅出Cocoa]详解键值观察(KVO)及其实现机理
相关文档:
http://blog.youkuaiyun.com/kesalin/article/details/8194240 [深入浅出Cocoa]详解键值观察(KVO)及其实现机理