其他分享
首页 > 其他分享> > iOS - 崩溃异常处理(1)

iOS - 崩溃异常处理(1)

作者:互联网

https://www.jianshu.com/p/4d32664dcfdb

 

一、关于崩溃

闪退估计是我们最不想看到的,对于用户而言,马上就能产生一种不悦,对于投资方而言,也会产生对技术实力的不信任感,所以,我们就需要对闪退进行处理,这里介绍一个不错的三方:AvoidCrash,写这个的大大也很牛逼,原文参照这里

这个三方可以处理例如插入空值到字典中或数组中引起的崩溃、数组越界引起的崩溃、unrecognized selector sent to instance等等的崩溃,都能捕获并且避免闪退。

对于插入空值、越界等,原理比较简单,就是利用Runtime的方法交换,把普通的插入和取值的方法,替换成安全插入和安全读取的方法,具体代码可以去看源码。
话不多说,先上效果:
以下是可导致崩溃的代码:

    NSString *nilStr = nil;
    NSArray *array = @[@"chenfanfang", nilStr];

 

 

    崩溃截图
若有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