iOS - 崩溃异常处理(1)
作者:互联网
https://www.jianshu.com/p/4d32664dcfdb
一、关于崩溃
闪退估计是我们最不想看到的,对于用户而言,马上就能产生一种不悦,对于投资方而言,也会产生对技术实力的不信任感,所以,我们就需要对闪退进行处理,这里介绍一个不错的三方:AvoidCrash
,写这个的大大也很牛逼,原文参照这里。
这个三方可以处理例如插入空值到字典中或数组中引起的崩溃、数组越界引起的崩溃、unrecognized selector sent to instance
等等的崩溃,都能捕获并且避免闪退。
对于插入空值、越界等,原理比较简单,就是利用Runtime
的方法交换,把普通的插入和取值的方法,替换成安全插入和安全读取的方法,具体代码可以去看源码。
话不多说,先上效果:
以下是可导致崩溃的代码:
NSString *nilStr = nil;
NSArray *array = @[@"chenfanfang", nilStr];
崩溃截图
若有AvoidCrash来防止崩溃,则不会崩溃,并且会将原本会崩溃情况的详细信息打印出来,如下图:
防止崩溃的效果
效果不错吧,接下来上使用步骤:
-
集成:
建议使用cocoapod
,仅需要pod AvoidCrash
一句话即可。(手动导入的步骤,可以参照上面所说的原文)。 -
使用方法:(只要在
AppDelegate
的didFinishLaunchingWithOptions
方法中调用avoidCrash
方法,就可以开始监听异常。)
- (void)avoidCrash {
/*
* 项目初期不需要对"unrecognized selector sent to instance"错误进行处理,因为还没有相关的崩溃的类
* 后期出现后,再使用makeAllEffective方法,把所有对应崩溃的类添加到数组中,避免崩溃
* 对于正式线可以启用该方法,测试线建议关闭该方法
*/
[AvoidCrash becomeEffective];
// [AvoidCrash makeAllEffective];
// NSArray *noneSelClassStrings = @[
// @"NSString"
// ];
// [AvoidCrash setupNoneSelClassStringsArr:noneSelClassStrings];
//监听通知:AvoidCrashNotification, 获取AvoidCrash捕获的崩溃日志的详细信息
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dealwithCrashMessage:) name:AvoidCrashNotification object:nil];
}
- 再监听异常的通知:
- (void)dealwithCrashMessage:(NSNotification *)notification {
MYLog(@"\n标签:文件,dSYM,iOS,上报,崩溃,异常,Bugly
来源: https://www.cnblogs.com/baitongtong/p/10954322.html