iOS NSDictionary及NSArray初始化后nil指针的影响

//联系人:石虎  QQ: 1224614774昵称:嗡嘛呢叭咪哄


一、reason(原因)总结


reason *** -[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array'

reason *** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[4]'

reason *** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[0]’ 


这个问题,一般是因为 nsarraynsdictionary插入数据为空而造成的

二、reason截图

NSArray图:


NSDictionary图:


三、实例代码

 假设我们现在要初始化一个{key1 : value1, key2 : value2, key3 : value3}的NSDictionary,一般有两种初始化方法:

1、使用标准的初始化方法:

NSDictionary *dictionary[[NSDictionaryalloc] initWithObjectsAndKeys:value1,@"key1",value2,@"key2", value3 ,@"value3",nil];

2、使用ios6.0以后新支持的初始化方法:

NSDictionary *dictionary =@{@"key1" : value1,@"key2" : value2,@"key3" : value3};

现在我们对value1 value2 value3进行赋值,并把value2设为nil指针:

NSString *value1 =@"value1";NSString *value2 =nil;NSString *value3 =@"value3";


3、另一种解决方法就是使用标准的初始化方法,即第一种初始化方法。但同时也要注意一个问题,使用

NDictionary *dictionary = [[NSDictionaryalloc]initWithObjectsAndKeys:value1,@"key1",value2,@"key2", value3 ,@"value3",nil];

如果我们把其中一个key或者value设为nil指针,那么系统会判断为全部对象插入完成,即相当于我们初始化数组及字典时最后的nil。因此这种方法虽然能避免插入nil指针时抛出的异常,但可能会成为一个工程中很大的安全隐患,并且难以发现。所以推荐使用第二种初始化方法,并对nil指针进行必要的判断,选择性使用[NSNull null]来实现特点的需求。同理,使用NSArray时也应该注意这类问题。


谢谢!!!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值