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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
iOS上调试Flutter页面崩溃的主要目标是定位并解决潜在的错误或异常,以下是一些常见的调试技巧和方法: 1. Flutter DevTools:Flutter DevTools是一个用于调试和分析Flutter应用程序的强大工具。它提供了一系列的性能分析、错误日志和UI层级检查等功能,帮助我们更轻松地定位和解决问题。 2. 日志输出:通过在代码中添加日志输出,可以追踪应用程序的执行过程。可以使用print语句或调试工具中的日志输出功能来记录Flutter页面运行时的关键信息。这样可以帮助我们找到崩溃的位置,并确定可能的原因。 3. 断点调试:在Xcode中使用断点调试功能可以帮助我们逐步执行代码,查看每一步的变化情况。通过在可能引发崩溃的位置设置断点,可以在崩溃发生时捕获并定位问题。 4. 异常捕获:在适当的地方使用try-catch块来捕获Flutter页面中可能引发的异常。通过捕获异常可以避免整个页面崩溃,而是执行后续的异常处理逻辑。 5. 错误处理:在代码中实现恰当的错误处理机制,例如校验输入、空值检查等,可以减少应用程序崩溃的可能性。 6. 内存管理:管理好Flutter页面的内存使用是避免崩溃的关键。对于资源密集的页面,可以优化内存管理策略,及时释放不再需要的对象,避免内存溢出导致的崩溃。 总之,调试Flutter页面崩溃的关键在于全面了解Flutter的调试工具,通过日志输出、断点调试、异常捕获等多种手段来定位和解决问题。同时,良好的错误处理和内存管理也能有效地减少页面崩溃的可能性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

风过不留痕

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

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

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

打赏作者

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

抵扣说明:

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

余额充值