Key-value coding(键值编码)
Key-value coding is a mechanism for indirectly accessing an object’s attributes and relationships using string identifiers.
Key-value 编程是一种机制:允许 developer 通过字符串 ID 的方式间接访问对象的属性和关系。
You can also use key-value coding to simplify your program code.
有时,我们可以使用 Key-valsue 编程简化代码。
Object Properties and KVC(对象属性和KVC的关系)
Central to key-value coding (or KVC) is the general notion of properties.
KVC 的核心就是属性概念。
A property refers to a unit of state that an object encapsulates.
属性是状态单元,该状态单元被对象封装。
A property can be one of two general types: an attribute (for example, name, title, subtotal, or textColor) or a relationship to other objects. Relationships can be either to-one or to-many
属性有两类:一类是 attribute,一类是与其它对象的关系。关系又分为一对一,一对多。
The value for a to-many relationship is typically an array or set, depending on whether the relationship is ordered or unordered.
一对多的关系中,其值通常为有序的数组,无序的集合。
KVC locates an object’s property through a key, which is a string identifier.
KVC 通过 key 定位对象的属性
A key usually corresponds to the name of an accessor method or instance variable defined by the object.
通过 key 我们可以访问到属性的访问器,或对象的实例变量。
The key must conform to certain conventions: It must be ASCII encoded, begin with a lowercase letter, and have no whitespace.
key 需要遵循一定的规则:ASCII 编码,以小写开头,不含空格。
A key path is a string of dot-separated keys that is used to specify a sequence of object properties to traverse.
key path 是以顿号分隔 keys 的字符串,通常指定了要遍历的对象属性的序列。
Making a Class KVC Compliant(使类服从 KVC)
The NSKeyValueCoding informal protocol makes KVC possible.
NSKeyValueCoding 提供了非正式的协议使 KVC 可能。
Two of its methods—valueForKey: and setValue:forKey:—are particularly important because they fetch and set a property’s value when given its key.
以上两个方法很重要,因为根据 key 可以访问和设置属性的值。
NSObject provides a default implementation of these methods, and if a class is compliant with key-value coding, it can rely on this implementation.
NSObject 提供了以上方法的实现,如果一个类遵循 KVC,可以依赖这个它的实现。
How you make a property KVC compliant depends on whether that property is an attribute, a to-one relationship, or a to-many relationship.
如何使属性顺从 KVC 取决于属性的类型:如 attribute,one to one,one to many。
For attributes and to-one relationships, a class must implement at least one of the following in the given order of preference (key refers to the property key):
对于 attributes,one to one 关系s,该类必须实现以下中一种。
- The class has a declared property with the name key.
类声明以 key 为名字的属性。- It implements accessor methods named key and, if the property is mutable, setKey:. (If the property is a Boolean attribute, the getter accessor method has the form isKey.)
实现以 key 为名字的访问器方法,如果 key 对应的属性是可变的,实现 setKey: 方法。
(如果属性是 Boolean 类型,它的 getter 访问器是 isKey)- It declares an instance variable of the form key or _key.
声明一个实例变量,格式为 key or _key。
Implementing KVC compliance for a to-many relationship is a more complicated procedure. Refer to the document that definitively describes key-value coding to learn what this procedure is.
实现 one to many 关系属性的 KVC 会更加复杂