IOS KVC的整理

kvc,簡(jiǎn)單的說(shuō)就是用字符串動(dòng)態(tài)的去操作一個(gè)對(duì)象。通俗的講就是鍵值編碼。

它的幾個(gè)方法如下:

賦值:

- (void)setValue:(nullable id)value forKey:(NSString *)key;

- (void)setValue:(nullable id)value forKeyPath:(NSString *)keyPath;

?解釋:第一個(gè)參數(shù)傳入想賦的值,第二個(gè)參數(shù)傳入想接收值的屬性? ?

-(void)setValuesForKeysWithDictionary:(NSDictionary*)keyedValues;

取值:

- (nullable id)valueForKey:(NSString *)key;

- (nullable id)valueForKeyPath:(NSString *)keyPath;

?解釋:參數(shù)是傳入你想取值的屬性名

根源:

OC中任何對(duì)象都直接或間接的繼承自NSObject,而在Foundation框架中,NSObject有個(gè)叫“NSKeyValueCoding”的分類,里面就包含了上面所有這些KVC方法。因此任何對(duì)象都可以通過(guò)KVC來(lái)取值和賦值。 ??就利用了動(dòng)態(tài)地修改 isa 指針的值的技術(shù)

kvc賦值取值的注意點(diǎn):

1.? ? KVC中,賦值時(shí)傳入的值都只能是對(duì)象類型,無(wú)法直接傳入基本數(shù)據(jù)類型。

2. ??通過(guò)KVC取值時(shí),所有的返回值類型都是id類型(也即對(duì)象類型),因此無(wú)法直接用基本數(shù)據(jù)類型的變量來(lái)接收,必須調(diào)用其對(duì)應(yīng)的類型轉(zhuǎn)換代碼先進(jìn)行類型轉(zhuǎn)換

3.KVC中所有的屬性名都要以字符串的形式傳入

kvc的優(yōu)點(diǎn)

可以直接訪問(wèn)私有成員變量。

可以簡(jiǎn)化字典轉(zhuǎn)模型代碼。

for( id key in dic){

【p setValue:dic[key] ?forkey:key】;

}

或者:【p setValuesForKeysWithDictionary:dic】;


KVC疑問(wèn)解密

1.? ? 用KVC取值或賦值時(shí),會(huì)優(yōu)先找這個(gè)屬性對(duì)應(yīng)的getter或setter方法來(lái)對(duì)這個(gè)屬性賦值

2.? ? 如果找不到,則會(huì)查找?guī)聞澗€的屬性,如果找到則賦值

3.? ? 如果依然找不到,則會(huì)查找不帶下劃線的屬性,如果找到則賦值

4.? ? 如果還是找不到,則報(bào)錯(cuò)

5.復(fù)合路徑:

?setValue:屬性值 forKeyPath:屬性路徑 valueForKeyPath:屬性名

如果需要操作訪問(wèn)一些“屬性里的屬性”時(shí),就用帶Path的方法來(lái)操作。

6.重寫setValue:值? ?forUndefinedKey:鍵方法,可以預(yù)防性編程。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • KVC(Key-valuecoding)鍵值編碼,單看這個(gè)名字可能不太好理解。其實(shí)翻譯一下就很簡(jiǎn)單了,就是指iOS...
    榕樹頭閱讀 769評(píng)論 0 2
  • KVC(Key-value coding)鍵值編碼,單看這個(gè)名字可能不太好理解。其實(shí)翻譯一下就很簡(jiǎn)單了,就是指iO...
    朽木自雕也閱讀 1,699評(píng)論 6 1
  • KVC簡(jiǎn)單介紹 KVC(Key-value coding)鍵值編碼,就是指iOS的開發(fā)中,可以允許開發(fā)者通過(guò)Key...
    公子無(wú)禮閱讀 1,524評(píng)論 0 6
  • 上面一篇文章沒(méi)有分析完yymodel 。 接著上篇接著分析 static void ModelSetValueFo...
    充滿活力的早晨閱讀 1,297評(píng)論 0 0
  • 技術(shù)無(wú)極限,從菜鳥開始,從源碼開始。 由于公司目前項(xiàng)目還是用OC寫的項(xiàng)目,沒(méi)有升級(jí)swift 所以暫時(shí)SDWebI...
    充滿活力的早晨閱讀 12,836評(píng)論 0 2

友情鏈接更多精彩內(nèi)容