KVC的全称是Key-Value Coding,俗称“键值编码”,可以通过一个key来访问某个属性
常见的API有
- - (void)setValue:(id)value forKeyPath:(NSString *)keyPath;
- - (void)setValue:(id)value forKey:(NSString *)key;
- - (id)valueForKeyPath:(NSString *)keyPath;
- - (id)valueForKey:(NSString *)key;
set时的查找顺序:
先查找setkey: _setkey
如果找到就调用,否则调用+(BOOL)accessInstanceVariablesDirectly
,如果这个函数返回的是YES,就会按_key 、_isKey 、key 、isKey
的顺序查找对应的成员变量,如果找到,就调用,否则抛异常,如下图。
联想到的相关问答:
-
通过KVC修改属性会触发KVO吗?
会触发KVO,KVO内部是会调用willChangeValueForKey:、 didChangeVlaueForKey:方法的,口说无凭,我们去重写下对象的这两个方法,看它会不会来;
//断点后
get时的查找顺序:getKey >> key >> isKey >> _key
1 | @interface Person : NSObject |
Please Star this Project if you like it! Follow would also be appreciated!
Peace!