OC之KVC小酌

KVC:keyValue conding是一种直接通过字符串来访问类属性的机制,而不是通过setter、getter方法,当要使用core data、KVO等技术的时候KVC就是关键技术。KVC的主要作用就是给模型属性赋值

他的主要方法定义在NSKeyValueCodingprotocol:

//前两个直接传入属性名,后两个需要传入属性路径
-(void)valueForKey:(NSString *)key;
-(void)setValue:(id)value ForKey:(NSString *)key;
-(void)vlueForKeyPath:(NSString *)keyPath;
-(void)setValue:(id)value forKeyPath:(NSString *)keyPath;

KVC的底层实现原理

1、遍历字典里所有的key,假如key:name

2、查找有没有setName,直接调用setName赋值

3、假如没有setName,就会查找有没有_name属性,使得_name = value

4、假如没有_name,还会去模型中找name,如果没有找到就会报错

给NSObject写一个分类,用来判断类中是否包含某个属性,返回一个BOOL值
+ (BOOL) getVariableWithClass:(Class) myClass varName:(NSString *)name{ 

    unsigned int outCount, i;
    Ivar *ivars = class_copyIvarList(myClass, &outCount);
    for (i = 0; i < outCount; i++) {
        Ivar property = ivars[i];
        NSString *keyName = [NSString stringWithCString:ivar_getName(property) encoding:NSUTF8StringEncoding];
        keyName = [keyName stringByReplacingOccurrencesOfString:@"_" withString:@""];
        if ([keyName isEqualToString:name]) {
            return YES;
        }
    }
    return NO;
}

猜你喜欢

转载自blog.csdn.net/ningn111/article/details/81941994
KVC
今日推荐