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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章