Foundation框架—错误接收与异常处理

一、Foundation框架—错误接收与异常处理

  我们都知道程序在运行过程中难免会出现各种错误和特殊问题,这个时候就需要我们使用接受错误(error)和捕获异常(Exception)。

1. 错误接收:

  1). 在C语言中常常会通过函数返回值来表示错误信息,但是返回值仅仅是一个整型值或者一个字符串,有时候难以表达详细准确的错误信息。oc中可以使用NSError类对象来发送运行时错误信息,然后以某种方式通知用户。。。

  我们可以通过下面的规则来传递错误信息:

  1). 使用方法的返回值来表明方法调用是否成功。如:返回值为BOOL类型,NO表示失败;返回值为id类型,nil表示失败;

  2). 有些方法最后一个参数的类型为NSError**,如果方法返回后该指针非空(不是NULL),则说明方法出错。该方法会在其方法体中创建一个自动释放的NSError对象,并通过该指针返回给调用方。

void stringExport() {
    NSString *str = @"1234995789我们是";
    NSString *path = @"/Users/shumei/Desktop/test.txt";
    
    NSError *error;
    [str writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:&error];
    if (error) {   // 返回的值不为空,也就是真
        NSLog(@"写入失败:%@", error);
    } else {
        NSLog(@"写入成功");
    }
}
实例2:
void book() {
    // 异常机制
    // NSError *error = nil;
    // 下面的效果等同上面
    NSError  *error;
    NSURL *myUrl = [NSURL URLWithString:@"http://qwerastdf.com.cn"];
    // 从url中生成字符串
    NSString *str = [NSString stringWithContentsOfURL:myUrl encoding:NSUTF8StringEncoding error:&error];
    
    NSLog(@"Str = %@", str);
    
    if (error) {    // 或者是 str == nil
        NSLog(@"Domain: %@, Code: %ld", [error domain], [error code]);
        NSDictionary *dic = [error userInfo];
        NSLog(@"user info dictionary: %@", [dic description]);
    } else {
        NSLog(@"haha");
    }
    
}
2. 异常处理

  大部分变成语言都支持异常处理。OC中也是一样,当出现异常时候,代码会生成异常类NSException对象,将异常的各种信息存入该对象中,然后将其抛出。异常抛出后,他会一直沿用调用栈堆的顶端(调用端)抛出,知道该异常被捕获。异常被捕获处理完毕后,程序继续执行。如果异常在向上抛出的过程中,没有任何代码能够捕获并处理异常,则程序退出。

  异常处理代码结构:

    @try {
        // Code that can potentially throw an exception
        // 异常处理域,编写可能出现异常的代码
        
    }
    @catch (AppCustomException *e) {
        // 处理AppCustomException类型异常的代码
    }
    @catch (NSException *exception) {
        // Handle an exception thrown in the @try block
        // 处理NSException 类型异常处理的代码
        // 如果希望重新抛出异常,则可以使用这个指令
        // @throw expression;
    }
    // 此部分是非强制的
    @finally {
        // Code that gets executed whether or not an exception is thrown
        // 无论怎样(发生或者不发生异常)都要执行的代码
    }
  抛出异常的方式有两种,一种是通过@throw指令,另一种是调用NSException类的实例方法raise。@throw指令可以抛出任何对象,而raise方法只适用于NSException类及其子类的对象。这两种方式效果是一样的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值