字面量-數(shù)組盾致、字典

建議使用字面量語法創(chuàng)建數(shù)組和字典主经。

數(shù)組場景一:

    NSNumber *num1 = @1;
    NSNumber *num2 = @2;
    NSNumber *num3;
    NSNumber *num4 = @4;
    NSNumber *num5 = @5;
    
    NSArray *array1 = [NSArray arrayWithObjects:num1, num2, num3, num4, num5, nil];
    
//    NSArray *array2 = @[num1, num2, num3, num4, num5];
    
    NSLog(@"---array1: %@", array1);
//    NSLog(@"---array2: %@", array2);
    
//    NSLog(@"---%@", array1[3]);
//    NSLog(@"---%@", [array1 objectAtIndex:3]);

打印結(jié)果:

---array1: (
    1,
    2
)

即:arrayWithObjects:這種方式創(chuàng)建數(shù)組,當(dāng)遇到值為nil時(shí)庭惜,數(shù)組停止創(chuàng)建罩驻,且不會(huì)報(bào)錯(cuò),實(shí)際使用時(shí)护赊,你可能不小心使得想要加入到數(shù)組的某個(gè)值為空了惠遏,結(jié)果得到的數(shù)組并不是你想要的,甚至你若不知道此方法遇到nil會(huì)停止創(chuàng)建骏啰,造成迷惑

數(shù)組場景二:

    NSNumber *num1 = @1;
    NSNumber *num2 = @2;
    NSNumber *num3;
    NSNumber *num4 = @4;
    NSNumber *num5 = @5;
    
    NSArray *array1 = [NSArray arrayWithObjects:num1, num2, num3, num4, num5, nil];
    
//    NSArray *array2 = @[num1, num2, num3, num4, num5];
    
    NSLog(@"---array1: %@", array1);
//    NSLog(@"---array2: %@", array2);
    
    NSLog(@"---%@", array1[3]);
//    NSLog(@"---%@", [array1 objectAtIndex:3]);

    NSNumber *num1 = @1;
    NSNumber *num2 = @2;
    NSNumber *num3;
    NSNumber *num4 = @4;
    NSNumber *num5 = @5;
    
    NSArray *array1 = [NSArray arrayWithObjects:num1, num2, num3, num4, num5, nil];
    
//    NSArray *array2 = @[num1, num2, num3, num4, num5];
    
    NSLog(@"---array1: %@", array1);
//    NSLog(@"---array2: %@", array2);
    
//    NSLog(@"---%@", array1[3]);
    NSLog(@"---%@", [array1 objectAtIndex:3]);

報(bào)錯(cuò)結(jié)果:

*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayI objectAtIndex:]: index 3 beyond bounds [0 .. 1]'

即:無論字面量根據(jù)下標(biāo)獲取相應(yīng)的值還是objectAtIndex: 只要超出數(shù)組范圍节吮,均會(huì)崩潰

數(shù)組場景三:

    NSNumber *num1 = @1;
    NSNumber *num2 = @2;
    NSNumber *num3;
    NSNumber *num4 = @4;
    NSNumber *num5 = @5;
    
//    NSArray *array1 = [NSArray arrayWithObjects:num1, num2, num3, num4, num5, nil];
    
    NSArray *array2 = @[num1, num2, num3, num4, num5];
    
//    NSLog(@"---array1: %@", array1);
//    NSLog(@"---array2: %@", array2);
    
//    NSLog(@"---%@", array1[3]);
//    NSLog(@"---%@", [array1 objectAtIndex:3]);

報(bào)錯(cuò)結(jié)果:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderArray initWithObjects:count:]: attempt to insert nil object from objects[2]'

即: 使用字面量方式創(chuàng)建數(shù)組時(shí),若遇到為空的值會(huì)崩潰判耕,實(shí)際創(chuàng)建數(shù)組時(shí)透绩,往數(shù)組中添加nil往往意味著錯(cuò)誤,字面量方式創(chuàng)建數(shù)組往往能較快的發(fā)現(xiàn)錯(cuò)誤所在

字典場景一:

    NSString *testObject;
    NSDictionary *dic1 = [NSDictionary dictionaryWithObjectsAndKeys:@"HH", @"FirstName", @"CC", @"LastName", testObject, @"hi", @"BB", @"hello", nil];
    
//    NSDictionary *dic2 = @{@"FirstName" : @"HH", @"LastName" : @"CC", @"hi" : testObject, @"hello" : @"BB"};
    
    NSLog(@"---dic1: %@", dic1);

//    NSLog(@"---dic2: %@", dic2);
    
    NSLog(@"--%@", dic1[@"hi"]);
    NSLog(@"--%@", [dic1 objectForKey:@"hi"]);

    NSLog(@"--%@", dic1[@"none"]);
    NSLog(@"--%@", [dic1 objectForKey:@"kkk"]);

打印結(jié)果:

---dic1: {
    FirstName = HH;
    LastName = CC;
}

--(null)
--(null)
--(null)
--(null)

即: 與數(shù)組類似,dictionaryWithObjectsAndKeys:方式創(chuàng)建字典時(shí)帚豪,遇到值為nil時(shí)碳竟,停止創(chuàng)建且不會(huì)報(bào)錯(cuò);通過key獲取其值,無論字面量獲取還是objectForKey:均不會(huì)報(bào)錯(cuò); 通過key獲取值狸臣,即使key為不存在的瞭亮,仍不會(huì)報(bào)錯(cuò)

字典場景二:

    NSString *testObject;
//    NSDictionary *dic1 = [NSDictionary dictionaryWithObjectsAndKeys:@"HH", @"FirstName", @"CC", @"LastName", testObject, @"hi", @"BB", @"hello", nil];
    
    NSDictionary *dic2 = @{@"FirstName" : @"HH", @"LastName" : @"CC", @"hi" : testObject, @"hello" : @"BB"};

報(bào)錯(cuò)結(jié)果:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[2]'

即:使用字面量方式創(chuàng)建字典時(shí),遇到值為空時(shí)鸟废,會(huì)造成崩潰蚌吸,這樣更容易發(fā)現(xiàn)代碼邏輯的錯(cuò)誤

因此,建議多使用字面量方式(快速創(chuàng)建)創(chuàng)建數(shù)組、字典以及NSNumber等

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末港准,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子氮昧,更是在濱河造成了極大的恐慌蓄愁,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贾节,死亡現(xiàn)場離奇詭異汁汗,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)栗涂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進(jìn)店門知牌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人斤程,你說我怎么就攤上這事角寸。” “怎么了忿墅?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵扁藕,是天一觀的道長。 經(jīng)常有香客問我疚脐,道長亿柑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任棍弄,我火速辦了婚禮望薄,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘照卦。我一直安慰自己式矫,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布役耕。 她就那樣靜靜地躺著采转,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上故慈,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天板熊,我揣著相機(jī)與錄音,去河邊找鬼察绷。 笑死干签,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的拆撼。 我是一名探鬼主播容劳,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼闸度!你這毒婦竟也來了竭贩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤莺禁,失蹤者是張志新(化名)和其女友劉穎留量,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哟冬,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡楼熄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了浩峡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片可岂。...
    茶點(diǎn)故事閱讀 39,919評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖翰灾,靈堂內(nèi)的尸體忽然破棺而出青柄,到底是詐尸還是另有隱情,我是刑警寧澤预侯,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布致开,位于F島的核電站,受9級特大地震影響萎馅,放射性物質(zhì)發(fā)生泄漏双戳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一糜芳、第九天 我趴在偏房一處隱蔽的房頂上張望飒货。 院中可真熱鬧,春花似錦峭竣、人聲如沸塘辅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽扣墩。三九已至哲银,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間呻惕,已是汗流浹背荆责。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留亚脆,地道東北人做院。 一個(gè)月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像濒持,于是被迫代替她去往敵國和親键耕。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容