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

序言

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

一 初始化方法
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);

打印结果

iOS-NSArray和 NSDictionary 初始化优劣对比_第1张图片
image.png
1.2 直接初始化-有空值
1.2.1 数组中某一个值为空
NSString *value = nil;
NSArray *array = @[@"str1",@"str2",value,@"str3"];
NSLog(@"%@",array);

打印结果

iOS-NSArray和 NSDictionary 初始化优劣对比_第2张图片
image.png
1.2.2 字典中某一个值为空
NSString *value = nil;
NSDictionary *dict = @{@"key1":@"value1",
                       @"key2":@"value2",
                       @"key3":value,
                       @"key4":@"value4"
                       };
NSLog(@"%@",dict);

打印结果

iOS-NSArray和 NSDictionary 初始化优劣对比_第3张图片
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);

打印结果

iOS-NSArray和 NSDictionary 初始化优劣对比_第4张图片
image.png

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

二 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);

打印结果

iOS-NSArray和 NSDictionary 初始化优劣对比_第5张图片
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);

运行结果 - 崩溃

iOS-NSArray和 NSDictionary 初始化优劣对比_第6张图片
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

你可能感兴趣的:(iOS-NSArray和 NSDictionary 初始化优劣对比)