键值编码是一种使用字符串标识符间接访问对象属性和关系的机制。它支持或与Cocoa编程特有的几种机制和技术相关,其中包括核心数据、应用程序脚本能力、绑定技术和声明属性的语言特性。(OSX上的Cocoa特定于脚本能力和绑定。)您还可以使用键值编码来简化程序代码。
对象属性和KVC
键值编码(或KVC)的核心是属性的一般概念。属性是指对象封装的状态单位。属性可以是两种常规类型之一:属性(例如,名称、标题、小计或textColor)或与其他对象的关系。关系可以是一对一,也可以是多对多。多对多关系的值通常是数组或集合,具体取决于关系是有序的还是无序的。
KVC通过键(字符串标识符)定位对象的属性。键通常对应于对象定义的访问器方法或实例变量的名称。密钥必须符合某些约定:它必须是ASCII编码的,以小写字母开头,并且没有空格。关键点路径是一组点分隔的关键点,用于指定要遍历的对象特性序列。序列中第一个键的属性是相对于特定对象(下图中的employee1)的,随后的每个键都是相对于前一个属性的值进行计算的。
使类KVC兼容
NSKeyValueCoding非正式协议使KVC成为可能。它的两个方法valueForKey:和setValue:forKey:-特别重要,因为它们在给定属性的键时获取和设置属性的值。NSObject提供了这些方法的默认实现,如果类符合键值编码,则它可以依赖于此实现。
如何使属性KVC兼容取决于该属性是属性、对一关系还是对多关系。对于属性和一对一关系,类必须按照给定的优先顺序实现以下至少一项(键指属性键):
- 该类有一个已声明的属性,该属性的名称为key。
- 它实现名为key的访问器方法,如果属性是可变的,则实现setKey:。(如果属性是布尔属性,则getter访问器方法的形式为isKey。)
- 它声明表单键或_键的实例变量。
为多对多关系实现KVC遵从性是一个更复杂的过程。