iOS-NSArray和 NSDictionary 初始化优劣对比

序言

NSArray和NSDictionary是我们平常开发经常用到的,但是如果使用不当,也会造成一些问题,这里详细介绍

一 初始化方法
1.1 直接初始化
NSString *value = @"hello word";

NSArray *array = @[@"str1",@"str2",value,@"str3"];

NSDictionary *dict = @{@"key1":@"value1",
                       @"key2":@"value2",
                       @"key3":value,
                       @"key4":@"value4"
                       };

NSLog(@"%@",array);
NSLog(@"%@",dict);

打印结果

image.png
1.2 直接初始化-有空值
1.2.1 数组中某一个值为空
NSString *value = nil;
NSArray *array = @[@"str1",@"str2",value,@"str3"];
NSLog(@"%@",array);

打印结果

image.png
1.2.2 字典中某一个值为空
NSString *value = nil;
NSDictionary *dict = @{@"key1":@"value1",
                       @"key2":@"value2",
                       @"key3":value,
                       @"key4":@"value4"
                       };
NSLog(@"%@",dict);

打印结果

image.png
1.2.3 字典中某一个 key 为空
NSString *value = @"Hello word";
NSString *key = nil;

NSDictionary *dict = @{@"key1":@"value1",
                       @"key2":@"value2",
                       key:value,
                       @"key4":@"value4"
                       };

NSLog(@"%@",dict);

打印结果

image.png

结论
1.如果数组直接使用初始化的方法,数组中value不能为空,否则会崩溃。
2.如果字典直接使用初始化的方法,字典中的key和value不能为空,否则会崩溃。

二 alloc 初始化
2.1 不为空初始化
NSArray *array = [[NSArray alloc] initWithObjects:@"str1",@"str2",@"str3",@"str4", nil];

NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:@"value1", @"key1", @"value2", @"key2", nil];

NSLog(@"%@",array);
NSLog(@"%@",dict);

打印结果

image.png
2.1 array 初始化空值
NSString *value = nil;

NSArray *array = [[NSArray alloc] initWithObjects:@"str1",value,@"str3",@"str4", nil];

NSLog(@"%@",array);

打印结果

image.png
2.2 NSDictionary 初始化空值 - key为空
NSString *key = nil;

NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:@"value1", @"key1", @"value2", @"key2", value, @"key3",nil];

NSLog(@"%@",dict);

打印结果

image.png
2.3 NSDictionary初始化空值 - value 为空
NSString *value = nil;

NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:@"value1", @"key1", value, @"key2", @"value3", @"key3",nil];

NSLog(@"%@",dict);

打印结果

image.png
2.4 NSDictionary初始化空值 - key为空并且 value 为空
NSString *value = nil;
NSString *key = nil;

NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:@"value1", @"key1", value, key, @"value3", @"key3",nil];

NSLog(@"%@",dict);

打印结果

image.png

结论
1.数组使用alloc进行初始化的时候,如果某一个值为空,则不会奔溃,但是到此为止,后面的值不会再添加进数组。
2.字典使用 alloc进行初始化的时候,如果某个 key为空,会造成奔溃。
3.字典使用alloc进行初始化的时候,如果某一个value为空,则不会造成奔溃,但是到此为止,后面的值不会再添加进字典。
4.字典使用alloc进行初始化的时候,如果某其中一个键值对都为空(key 为空,value 为空),则不会造成奔溃,但是到此为止,后面的值不会再添加进字典。

3.NSMutalbeArray 初始化

可可变数组增加空值

NSMutableArray *arrM = [NSMutableArray array];
[arrM addObject:@"str1"];
[arrM addObject:value];
[arrM addObject:@"str1"];

NSLog(@"%@",arrM);

运行结果 - 崩溃

image.png
4.NSMutalbeNsdictinoary 初始化
4.1 给可变字典增加空值 - 某个value为空
NSString *value = nil;
NSString *key1 = nil;
NSString *key2 = @"key2";

NSMutableDictionary *dictM = [NSMutableDictionary dictionary];
[dictM setValue:@"value1" forKey:@"key1"];
[dictM setValue:value forKey:@"key2"];
[dictM setValue:@"value3" forKey:@"key3"];

NSLog(@"%@",dictM);

运行结果

image.png

不会崩溃,但是会过滤掉值为空的键值对

4.2 某一个 key 为空
NSString *value = nil;
NSString *key1 = nil;
NSString *key2 = @"key2";

NSMutableDictionary *dictM = [NSMutableDictionary dictionary];
[dictM setValue:@"value1" forKey:@"key1"];
[dictM setValue:@"value2" forKey:key1];
[dictM setValue:@"value3" forKey:@"key3"];

NSLog(@"%@",dictM);

运行结果 - 崩溃

image.png
4.3 某一个键值对,key为空,value也为空
NSString *value = nil;
NSString *key1 = nil;
NSString *key2 = @"key2";

NSMutableDictionary *dictM = [NSMutableDictionary dictionary];
[dictM setValue:@"value1" forKey:@"key1"];
[dictM setValue:value forKey:key1];
[dictM setValue:@"value3" forKey:@"key3"];

NSLog(@"%@",dictM);

运行结果 - 崩溃

image.png
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 3,346评论 2赞 9
  • 官方文档 初始化 Initialization是为准备使用类,结构体或者枚举实例的一个过程。这个过程涉及了在实例里...
    hrscy阅读 1,231评论 0赞 1
  • 点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...
    layjoy阅读 14,846评论 0赞 15
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 6,430评论 0赞 10
  • “设计和其它元素一样可以打造一个城市的形象,阐述一个城市的故事,甚至可以做得更好。当然,设计可不止这些功能。”
    曾华清阅读 257评论 0赞 0

友情链接更多精彩内容