博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
字面量-数组、字典
阅读量:7049 次
发布时间:2019-06-28

本文共 3699 字,大约阅读时间需要 12 分钟。

建议使用字面量语法创建数组和字典。

数组场景一:

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]);复制代码

打印结果:

---array1: (    1,    2)复制代码

即:arrayWithObjects:这种方式创建数组,当遇到值为nil时,数组停止创建,且不会报错,实际使用时,你可能不小心使得想要加入到数组的某个值为空了,结果得到的数组并不是你想要的,甚至你若不知道此方法遇到nil会停止创建,造成迷惑

数组场景二:

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]);复制代码

报错结果:

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

即:无论字面量根据下标获取相应的值还是objectAtIndex: 只要超出数组范围,均会崩溃

数组场景三:

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]);复制代码

报错结果:

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

即: 使用字面量方式创建数组时,若遇到为空的值会崩溃,实际创建数组时,往数组中添加nil往往意味着错误,字面量方式创建数组往往能较快的发现错误所在

字典场景一:

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"]);复制代码

打印结果:

---dic1: {    FirstName = HH;    LastName = CC;}--(null)--(null)--(null)--(null)复制代码

即: 与数组类似,dictionaryWithObjectsAndKeys:方式创建字典时,遇到值为nil时,停止创建且不会报错;通过key获取其值,无论字面量获取还是objectForKey:均不会报错; 通过key获取值,即使key为不存在的,仍不会报错

字典场景二:

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"};复制代码

报错结果:

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

即:使用字面量方式创建字典时,遇到值为空时,会造成崩溃,这样更容易发现代码逻辑的错误

因此,建议多使用字面量方式(快速创建)创建数组、字典以及NSNumber等

转载地址:http://pepol.baihongyu.com/

你可能感兴趣的文章
移动安全身份认证厂商及产品盘点
查看>>
J2EE的13个规范
查看>>
记录-使用CSDN-markdown编辑器
查看>>
Windows 10将很快允许用户在未安装应用之前首先进行体验
查看>>
巧测字段最大长度
查看>>
TuShare(2):使用TuShare,抓取股票数据并存储到数据库
查看>>
还在跑分?什么样的固态硬盘才是好产品
查看>>
AI进入安防 安防的未来是怎样?
查看>>
《敏捷可执行需求说明 Scrum提炼及实现技术》—— 2.3 要求所有干系人参与
查看>>
Mozilla将从3月31日起实行插件“点击运行”机制
查看>>
《可穿戴创意设计:技术与时尚的融合》一一1.3 可穿戴设备和艺术
查看>>
JavaScript 实现的人脸检测方法
查看>>
Qubes OS 创始人认为英特尔 x86 是有害的
查看>>
《ANSYS Workbench有限元分析实例详解(静力学)》——2.3 工程流程图
查看>>
《现代体系结构上的UNIX系统:内核程序员的对称多处理和缓存技术(修订版)》——1.7 习题...
查看>>
《音乐达人秀:Adobe Audition CC实战222例》——1.2 从双卡录音机到多轨录音软件...
查看>>
年度回顾 看看 2016 年编程语言发展趋势
查看>>
《电路分析导论(原书第12版)》一2.7 电池寿命因素
查看>>
Java异常处理的误区和经验总结
查看>>
在 LinkedIn 之后,微软本周又收购了一家公司
查看>>