微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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一句话即可。(手动导入的步骤,可以参照上面所说的原文)。

  • 使用方法:(只要在AppDelegatedidFinishLaunchingWithOptions方法调用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
                
                                 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐