异常处理和崩溃分析

在运行程序的时候,我们会经常遇到一些异常代码,或者使工程崩溃的原因,为了更好的用户体验进行版本迭代,我们需要将这些问题收集起来。从而快速定位问题。

1.异常处理
通常我们在自定义一些方法的时候,关于传参我们或许考虑的不全面,导致一些异常情况,例如,当我们封装一个方法,穿的参数是方法名,可是方法名在工程中为定义,当进行这种操作的时候,会让用户体验十分不好,因为用户进行了操作,却没有相应的程序反应进行呼应,这时,我么可以通过代码,在相应的地方抛出异常。

if (signature == nil) {
        // @throw [NSException exceptionWithName:@"牛逼的错误" reason:@"方法找不到" userInfo:nil];
        [NSException raise:@"牛逼的错误" format:@"%@方法找不到", NSStringFromSelector(selector)];
    }

2.崩溃分析
崩溃导致的必然结果就是程序在手机上闪退,为了使程序不会闪退,我们可以定位到代码崩溃处加上以下代码即可。

 @try {
       //崩溃代码

    }
    @catch (NSException *exception) {
        NSLog(@"-----代码有异常----%@", exception );
    }
    @finally {
        NSLog(@"---------33333-");
    }

用户在使用应用的期间,或许会碰到一些致使程序闪退的情况,而我们需要将这些情况收集起来,目前通常都会采用第三方平台进行统计分析,例如

  1. 列表友盟
  2. Flurry
  3. Crashlytics

而我们也可以利用苹果自身的sdk NSException进行收集

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.

    // 将沙盒中的错误信息传递给服务器

    // 设置捕捉异常的回调
    NSSetUncaughtExceptionHandler(handleException);

    return YES;
}
/**
 * 拦截异常
 */
void handleException2(NSException *exception)
{
    NSMutableDictionary *info = [NSMutableDictionary dictionary];
    info[@"callStack"] = [exception callStackSymbols]; // 调用栈信息(错误来源于哪个方法)
    info[@"name"] = [exception name]; // 异常名字
    info[@"reason"] = [exception reason]; // 异常描述(报错理由)
//    [info writeToFile:<#(NSString *)#> atomically:<#(BOOL)#>];
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值