iOS 给字典中插入nil的几种情景

简介: NSString *str = nil; NSDictionary *dic = @{@"key":str};//zs20171220 会崩溃'*** -[__NSPlaceholderDictionary initWithObjec...

NSString *str = nil;

NSDictionary *dic = @{@"key":str};

//zs20171220 会崩溃'*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[0]

字面量添加nil 会崩溃


NSString *str = nil;

NSDictionary *dicParam = [[NSDictionary alloc] initWithObjectsAndKeys:@"",@"key1",str,@"key2",nil];

NSLog(@"dicParam____%@",dicParam[@"key2"]);//zs20171220 value 值可以为nil,但是这个时候nil意味着结束添加了

NSLog(@"dicParam____%@",dicParam.allKeys); NSLog(@"dicParam____%@",dicParam[@"key1"]);//zs20171220 key 不能设置成nil 否则会崩溃

NSString *str = nil;

NSMutableDictionary *dicMutable = [NSMutableDictionary dictionaryWithCapacity:0];

[dicMutable setValue:str forKey:@"key1"];//zs20171220 插入nil 不会崩溃

[dicMutable setValue:@"ddd" forKey:@"key2"];

[dicMutable setValue:nil forKey:@"key3"];//zs20171220 插入nil 不会有这个key 和值

NSLog(@"___%@",dicMutable);


20180925+总结:

   用字面量语法创建数组时要注意,若数组元素中有nil, 则会抛出异常,因为字面量语法实际上只是一种“语法糖”(syntactic sugar),其效果等于是先创建了一个数组,然后把方括号内的所有对象都加到这个数组中。

eg:     

NSArray *arrayA = [NSArray arrayWithObjects:obj1,obj2,obj3,nil];  

 NSArray *arrayB = @[obj1,obj2,obj3];

如果obj1与obj3都指向了有效的OC对象,而obj2是nil,按字面量语法创建数组arrayB时会抛出异常。

arrayA 虽然能创建出来,但是其中却只含有obj1一个对象,原因在于arrayWithObjects:方法会依次处理各个参数,直到发现nil为止,由于obj2是nil,所以该方法会提前结束。

重点(敲黑板):

       这个微妙的差别说明,使用字面量语法更为安全。抛出异常令应用程序终止执行,这比创建好数组之后发现元素个数少了要好。

目录
相关文章
|
JSON 数据格式 iOS开发
iOS Json转字典Dict
开发中有时候需要用到假数据, 假数据的用途
360 0
iOS Json转字典Dict
|
C语言 iOS开发
iOS中nil 、NULL、 Nil 、NSNull,你真的了解吗?
今天突然间对nil和NULL产生了疑问,就在网上查了一下相关的问题,看完之后终于有了清晰的认识,跟我一样有疑问的童鞋们可以看看。
|
存储 iOS开发
iOS线程字典
iOS线程字典
168 0
|
iOS开发
iOS中第三方有序字典框架——M13OrderedDictionary(二)
iOS中第三方有序字典框架——M13OrderedDictionary
489 0
|
存储 开发工具 开发者
iOS中第三方有序字典框架——M13OrderedDictionary(一)
iOS中第三方有序字典框架——M13OrderedDictionary
412 0
|
存储 iOS开发 容器
iOS - OC NSDictionary 字典
前言 @interface NSDictionary : NSObject @interface NSMutableDictionary : NSDictionary 字典只能存储 OC 对象,不能存储 C 语言中的基本数据类型,也不能存储 nil 。
1303 0
|
iOS开发 存储 Swift
iOS - Swift Dictionary 字典
前言 public struct Dictionary : CollectionType, DictionaryLiteralConvertible public class NSDictionary : NSObject, NSCopying, NSMutableCopying, NSSecureCoding, NSFastEnumeration 字典用于存储无序的数据元素值,它可以存储任何类型的元素,甚至可以将数组作为字典的元素。
1229 0
|
iOS开发 存储
ios nil、NULL和NSNull 的使用
<p style="font-size:14px; border:0px; margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px; color:rgb(69,69,69); font-family:tahoma,helvetica,arial; line-height:21px"> nil用来给对象赋
1594 0