iOS常见崩溃和一些避免

在日常开发中,当程序崩溃的时候是不是特别紧张呢,明明我的代码没有问题为何就崩溃了呢?
又是因为什么原因导致的呢?该怎么去避免?

APP常见崩溃:

  1. 数组越界,插nil等
  2. 字典的构造与修改
  3. NSString crash (字符串操作的crash)
  4. unrecognized selector
  5. UI not on Main Thread Crash (非主线程刷UI (机制待改善))

1.数组下标的越界

简易示例代码:

- (void)testArrayOut {
    NSArray *array = @[@"a", @"b", @"c"];
    NSLog(@"%@", array[4]);
}

崩溃信息
*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayI objectAtIndexedSubscript:]: index 4 beyond bounds [0 .. 2]'

一般对数组的操作出现Crash的情况:
* 取值:index超出array的索引范围
* 添加:新增的object为nil或者Null
* 插入:index大于count、插入的object为nil或者Null
* 删除:index超出array的索引范围
* 替换:index超出array的索引范围、替换的object为nil或者Null

2.字典的构造与修改

简易示例代码:

- (void)testDictionCrash {
    NSString *aKey = nil;
    NSDictionary *dictionary = @{@"a": aKey};
    NSLog(@"%@", dictionary);
}
一般对字典操作出现Crash的情况:
  • NSDictionary 不支持 nil 作为 key.
  • NSDictionary 不支持 nil 作为 value.

崩溃信息

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[0]'

以上预防方法:
1.替换系统方法.通过 Method Swizzling 替换成自己的方法,然后再执行方法的时候加以判断.
2.使用类别扩展一个方法自定义实现对应操作后的预防.

github传送门:https://github.com/WorkerHuan/HH_ObjectSafe1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风过不留痕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值