KVC
的全称是Key-Value Coding
,俗称“键值编码”,可以通过一个key来访问某个属性
使用
常用API
1 2 3 4
| - (void)setValue:(id)value forKeyPath:(NSString *)keyPath; - (void)setValue:(id)value forKey:(NSString *)key; - (id)valueForKeyPath:(NSString *)keyPath; - (id)valueForKey:(NSString *)key;
|
keyPath比key增加了路径访问;例:person.age
原理
setValue:forKey:
原理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| graph LR id1[setValue:forKey:] id2{按照</br>setKey: _setKey:</br>顺序查找方法} id3[传递参数'调用方法] id4{查看</br>accessInstanceVariablesDirectly</br>类方法的返回值} id5{按照</br>_key _isKey key isKey</br>查找} id6[直接赋值] id7[调用:</br>setValue:forUndefinedKey:</br>并抛出异常NSUnknownKeyException]
id1 --> id2 id2 --找到了方法--> id3 id2 --没找到方法--> id4 id4 --YES--> id5 id5 --找到了成员变量--> id6 id5 --没找到成员变量--> id7 id4 --NO--> id7
|
accessInstanceVariablesDirectly
方法的默认返回值是YES
valueForKey:
的原理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| graph LR id1[valueForKey:] id2{按照</br>getKey key isKey _key</br>顺序查找方法} id3[调用方法] id4{查看</br>accessInstanceVariablesDirectly</br>类方法的返回值} id5{按照</br>_key _isKey key isKey</br>查找} id6[直接取值] id7[调用:</br>valueForUndefinedKey:</br>并抛出异常NSUnknownKeyException]
id1 --> id2 id2 --找到了方法--> id3 id2 --没找到方法--> id4 id4 --YES--> id5 id5 --找到了成员变量--> id6 id5 --没找到成员变量--> id7 id4 --NO--> id7
|