Key-Value Coding是一种非直接访问对象属性的机制,使用字符串来定位属性,而不是直接调用属性的getter或者setter等访问器。
如果属性是简单类型,例如scalar, String或者Boolean,将会转换为NSNumber处理。如obj的a属性是Boolean:
| 1 2 |  | 
Key必须遵循OC命名规范:ASCII编码,以小写字母开头,不含空格。
keyPath是将key组合后的一种方便用法,用点分割属性名:
| 1 2 3 4 5 6 7 |  | 
valueForKey:找不到给定的Key,会调用valueForUndefinedKey:,默认该方法会抛出 NSUndefinedKeyException,可以重载valueForUndefinedKey:这个方法来进行自己的逻辑。
valueForKeyPath:本质上调用每个返回值的valueForKey:,所以当某层找不到也会调用valueForUndefinedKey:。
setValue:forKey:找不到给定的Key,会调用setValue:forUndefinedKey:,和ValueForUndefiedKey:一样,默认抛出NSUndefinedKeyException。
setValuesForKeysWithDictionary:是一种批量setValue:forKey:,如果Value是nil,需要用NSNull代替,系统会自动转换。
如果将一个简单类型设置为nil,例如将Boolean类型设置为nil,调用setNilValueForKey:,该方法抛出NSInvalidArgumentException,可以重载setNilValueForKey:,来将nil转换为合适的值。
参考文档:Apple Key-Value Coding Programming Guide