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];
}

results matching ""

    No results matching ""