建議使用字面量語法創(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等