序言
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);
打印结果
1.2 直接初始化-有空值
1.2.1 数组中某一个值为空
NSString *value = nil;
NSArray *array = @[@"str1",@"str2",value,@"str3"];
NSLog(@"%@",array);
打印结果
1.2.2 字典中某一个值为空
NSString *value = nil;
NSDictionary *dict = @{@"key1":@"value1",
@"key2":@"value2",
@"key3":value,
@"key4":@"value4"
};
NSLog(@"%@",dict);
打印结果
1.2.3 字典中某一个 key 为空
NSString *value = @"Hello word";
NSString *key = nil;
NSDictionary *dict = @{@"key1":@"value1",
@"key2":@"value2",
key:value,
@"key4":@"value4"
};
NSLog(@"%@",dict);
打印结果
结论
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);
打印结果
2.1 array 初始化空值
NSString *value = nil;
NSArray *array = [[NSArray alloc] initWithObjects:@"str1",value,@"str3",@"str4", nil];
NSLog(@"%@",array);
打印结果
2.2 NSDictionary 初始化空值 - key为空
NSString *key = nil;
NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:@"value1", @"key1", @"value2", @"key2", value, @"key3",nil];
NSLog(@"%@",dict);
打印结果
2.3 NSDictionary初始化空值 - value 为空
NSString *value = nil;
NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:@"value1", @"key1", value, @"key2", @"value3", @"key3",nil];
NSLog(@"%@",dict);
打印结果
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);
打印结果
结论
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);
运行结果 - 崩溃
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);
运行结果
不会崩溃,但是会过滤掉值为空的键值对
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);
运行结果 - 崩溃
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);
运行结果 - 崩溃