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