//KVC: key value coding 键值编码, 是一种间接访问实例变量的方式, 通过指定的key来找到对应的实例变量(切记:key是字符串)
//KVC工作原理: 根据指定的key, 比如name
//1 先查找该类是否有对应的setter方法:比如setName, 若有, 则通过setter方法给实例变量赋值, 若没有, 则就转到2
//2 查找该类有没有一个_+key的实例变量, 比如_name, 如有, 则给_name赋值, 若没有, 则转到3
//3 查找该类有没有一个key的实例变量, 比如name, 如有, 则给name赋值, 若没有, 则转到4
//4 如没有找到, 系统会抛出一个NSUnknownKeyException, 说明没有找到匹配的key(也就是该类既没有setName, 也没有_name, 也没有name)
@autoreleasepool {
Person *per = [[Person alloc] init];
NSDictionary *dic = @{@"name":@"Frank",@"gender":@"man",@"mother":@"lanou",@"father":@"lanou",@"number":@"9527",@"height":@180,@"weight":@72,@"age":@30,@"school":@"lanou",@"girlFriendName":@"aaaa", @"fjei":@"fjie",@"fjei":@"fjie"};
//一般是初始化方法通过字典来赋值
Student *stu = [[Student alloc] initWithDic:dic];
//通过字典给每个属性赋值, 其实现原理是下面的快速枚举(与顺序无关)
//[stu setValuesForKeysWithDictionary:dic];
<pre name="code" class="objc">//当给定的key未匹配到对应的方法以及实例变量时, 会自动调用该方法, 所以我们只需实现该方法即可(实现体中可以没有内容)<pre name="code" class="objc"><pre name="code" class="objc">}
//当给定的key未匹配到对应的方法以及实例变量时, 会自动调用该方法, 所以我们只需实现该方法即可(实现体中可以没有内容)
- (void)setValue:(id)value forUndefinedKey:(NSString *)key {
NSLog(@"Person->undefinedKey");
}
//当给定的value匹配不到对应的getter方法以及对应的实例变量时, 会自动调用该方法
- (id)valueForUndefinedKey:(NSString *)key {
return nil;
}
KVC
最新推荐文章于 2018-08-29 17:13:18 发布