1.主要功能:
1.KVC可以給壹個對象的私有變量賦值。
使用註意事項:
1 & gt;。設置鍵/鍵路徑位置的字符串必須具有相應的屬性(或_屬性)。
2 & gt之間的區別。setValue:forKey:和setValue:forKeyPath
KeyPath可以根據內部點語法進壹步找到對應的鍵。
person * p =[[personal loc]init];
p . book =[[Bookalloc]init];
[pset value:@ " 18 " forKey:@ " age "];?//不報告錯誤
[pset value:@ " 20 " for key path:@ " age "];//不報告錯誤
[pset value:@ " 300 " forKey:@ " book . price "];//報告了錯誤
[pset value:@ " 300 " for key path:@ " book . price "];//不報告錯誤
2.用於字典到模型(MJExtension框架)
使用註意事項:
1 & gt;您必須確保字典中相應的鍵可以在模型中找到相應的屬性。
2 & gt模型中的屬性在字典中可能沒有對應的鍵。
3.通過KVC取出私人變量的值。
4.模型對象到字典(理解)
person * p =[[personal loc]init];
p.name=@ "小白";
p . age = 1;
//_height是私有變量。
ns dictionary * dict =[pdictionaryWithValuesForKeys:@[@ "姓名","年齡","身高"]];
2.KVC內部實施
SetValuesForKeysWithDictionary:底層實現
//方便字典中的所有鍵值。為相應的鍵和值賦值。
[dictenumeratekeysandobjectsusingblock:^(id _非nullkey,id _非nullobj,bool * _非nullstop) {
//分配相應的鍵,值。
[items et value:objforKeyPath:key];
}];
setValue:forKeyPath的底層實現:
1.能調嗎?使用這個屬性的集合?方法。(您可以用這種方法過濾值)
2.如果沒有設定呢?方法,它會判斷是否存在與鍵值同名的成員屬性。如果有,它會直接賦值,icon = obj。
3.如果沒有,還會判斷是否有相同鍵值名稱的下劃線成員屬性,如果有,直接賦值,_icon = obj。
4.如果沒有,直接報錯。找不到對應的成員屬性(setValue:forUndefinedKey:)。
使用註意事項:
1 & gt;您必須確保字典中相應的鍵可以在模型中找到相應的屬性。
2 & gt模型中的屬性在字典中可能沒有對應的鍵。