KVC(Key Value Coding)
1.主要作用:
1.KVC可以給對(duì)象的私有變量賦值(UIPageControl)
使用注意:
1>.設(shè)置key/keyPath位置的字符串必須保證有對(duì)應(yīng)的屬性(或者_(dá)屬性)
2>.setValue:forKey:和setValue:forKeyPath區(qū)別
keyPath可以根據(jù)內(nèi)部點(diǎn)語(yǔ)法,進(jìn)一步查找對(duì)應(yīng)的key
Person*p = [[Personalloc]init];
p.book= [[Bookalloc]init];
[psetValue:@"18"forKey:@"age”]; ? ? ? //不報(bào)錯(cuò)
[psetValue:@"20"forKeyPath:@"age”];//不報(bào)錯(cuò)
[psetValue:@"300"forKey:@"book.price”]; ? ? //報(bào)錯(cuò)
[psetValue:@"300"forKeyPath:@"book.price”]; //不報(bào)錯(cuò)
2.用于字典轉(zhuǎn)模型(MJExtension框架)
使用注意:
1>必須保證字典中對(duì)應(yīng)key在模型中能找到對(duì)應(yīng)的屬性
2>模型中的屬性可以在字典中沒有對(duì)應(yīng)的Key
3.通過KVC取出私有變量的值
4.模型對(duì)象轉(zhuǎn)字典(了解)
Person*p = [[Personalloc]init];
p.name=@"xiaobai";
p.age=1;
//_height為私有變量
NSDictionary*dict = [pdictionaryWithValuesForKeys:@[@"name",@"age",@"height"]];
2.KVC內(nèi)部實(shí)現(xiàn)
setValuesForKeysWithDictionary:底層實(shí)現(xiàn)
//便利字典當(dāng)中的所有Key Value值.給對(duì)應(yīng)的key,value賦值
[dictenumerateKeysAndObjectsUsingBlock:^(id _Nonnullkey,id _Nonnullobj,BOOL*_Nonnullstop) {
//給對(duì)應(yīng)的key,value賦值
[itemsetValue:objforKeyPath:key];
}];
setValue:forKeyPath:的底層實(shí)現(xiàn):
1.它會(huì)調(diào)?用這個(gè)屬性的set?方法.(可以在該方法中進(jìn)行值過濾)
2.如果沒有set?方法,它會(huì)去判斷有沒有跟key值同名的成員屬性.如果有,就直接賦 值,icon = obj.
3.如果沒有,那么它還會(huì)去判斷有沒有跟key值名相同帶有下劃線的成員屬性,如果有,就直接賦值,_icon = obj.
4.如果都沒有,就直接報(bào)錯(cuò).找不到對(duì)應(yīng)的成員屬性(setValue:forUndefinedKey:).
使用注意:
1>必須保證字典中對(duì)應(yīng)key在模型中能找到對(duì)應(yīng)的屬性
2>模型中的屬性可以在字典中沒有對(duì)應(yīng)的Key