iOS 給字典中插入nil的幾種情景

NSString *str = nil;

NSDictionary *dic = @{@"key":str};

//zs20171220 會(huì)崩潰'*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[0]

字面量添加nil 會(huì)崩潰


NSString *str = nil;

NSDictionary *dicParam = [[NSDictionary alloc] initWithObjectsAndKeys:@"",@"key1",str,@"key2",nil];

NSLog(@"dicParam____%@",dicParam[@"key2"]);//zs20171220 value 值可以為nil,但是這個(gè)時(shí)候nil意味著結(jié)束添加了

NSLog(@"dicParam____%@",dicParam.allKeys); NSLog(@"dicParam____%@",dicParam[@"key1"]);//zs20171220 key 不能設(shè)置成nil 否則會(huì)崩潰

NSString *str = nil;

NSMutableDictionary *dicMutable = [NSMutableDictionary dictionaryWithCapacity:0];

[dicMutable setValue:str forKey:@"key1"];//zs20171220 插入nil 不會(huì)崩潰

[dicMutable setValue:@"ddd" forKey:@"key2"];

[dicMutable setValue:nil forKey:@"key3"];//zs20171220 插入nil 不會(huì)有這個(gè)key 和值

NSLog(@"___%@",dicMutable);


20180925+總結(jié):

? ?用字面量語(yǔ)法創(chuàng)建數(shù)組時(shí)要注意,若數(shù)組元素中有nil, 則會(huì)拋出異常,因?yàn)樽置媪空Z(yǔ)法實(shí)際上只是一種“語(yǔ)法糖”(syntactic sugar),其效果等于是先創(chuàng)建了一個(gè)數(shù)組,然后把方括號(hào)內(nèi)的所有對(duì)象都加到這個(gè)數(shù)組中。

eg: ? ??

NSArray *arrayA = [NSArray arrayWithObjects:obj1,obj2,obj3,nil]; ?

?NSArray *arrayB = @[obj1,obj2,obj3];

如果obj1與obj3都指向了有效的OC對(duì)象,而obj2是nil,按字面量語(yǔ)法創(chuàng)建數(shù)組arrayB時(shí)會(huì)拋出異常。

arrayA 雖然能創(chuàng)建出來,但是其中卻只含有obj1一個(gè)對(duì)象,原因在于arrayWithObjects:方法會(huì)依次處理各個(gè)參數(shù),直到發(fā)現(xiàn)nil為止,由于obj2是nil,所以該方法會(huì)提前結(jié)束。

重點(diǎn)(敲黑板):

? ? ? ?這個(gè)微妙的差別說明,使用字面量語(yǔ)法更為安全。拋出異常令應(yīng)用程序終止執(zhí)行,這比創(chuàng)建好數(shù)組之后發(fā)現(xiàn)元素個(gè)數(shù)少了要好。

最后編輯于
?著作權(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)容

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