KVC实现原理
// 利用KVC字典转模型
[flag setValuesForKeysWithDictionary:dict];
遍历字典里面所有的key
key:name
就去模型中查找有没有setName:,直接调用这个对象setName:赋值
假如没有找到setName:。就会去模型中查找有没有_name属性,_name = value
假如没有找到_name,还会去模型中查找name属性
最终没有找到,就会直接报错。
[dict enumerateKeysAndObjectsUsingBlock:^(NSString *key, id obj, BOOL *stop) {
NSString *funcName = [NSString stringWithFormat:@"set%@",key.capitalizedString];
if ([flag respondsToSelector:@selector(funcName)]) {
[flag setValue:obj forKeyPath:key];
}
}];
- 重写模型属性的set方法,KVC内部会调用
- (void)setIcon:(NSString *)icon
{
// NSLog(@"%s",__func__);
_icon = [UIImage imageNamed:icon];
}