KVC基础理解
KVC
全称Key-Value-Coding
俗称键值编码
,可以通过一个key
来访问某个属性
。
API:
- (void)setValue:(nullable id)value forKey:(NSString *)key;
- (void)setValue:(nullable id)value forKeyPath:(NSString *)keyPath;
- (nullable id)valueForKey:(NSString *)key;
- (nullable id)valueForKeyPath:(NSString *)keyPath;
通过如下示例使用:
GYPerson *person = [[GYPerson alloc] init];
[person setValue:@(2) forKey:@"age"];
NSLog(@"%ld", (long)person.age);
KVC :setValue:forKey:的原理
根据示例图,我们可以观察到,如果存在
setValue:
或_setValue
,就正常传递参数,设置值。一、同时存在
setValue:
与_setValue
,优先调用setAge:(NSInteger)age;二、不存在
setValue
,则调用_setAge:(NSInteger)age;三、如果不允许直接访问成员变量,直接报错
四、默认允许访问成员变量,不存在
setValue:
与_setValue
方法时,他会按顺序查找_key
,_isKey
,key
,isKey
。我们在GYPerson.h
中定义相关成员变量。
@interface GYPerson : NSObject {
NSInteger _age;
NSInteger _isAge;
NSInteger age;
NSInteger isAge;
}
@end
优先向
_key
赋值,其它以此类推可验证。
valueForKey:原理
会触发
验证可与
setValue:forKey:的原理
一致