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

来源:互联网 发布:2017云计算的上市公司 编辑:程序博客网 时间:2024/06/07 05:51

一、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
原创粉丝点击