Cocoa异常编程主题介绍

4抛出异常

2019-07-29  本文已影响0人  蜗牛你慢慢来

一旦程序检测到异常,它必须将异常传播到处理它的代码。此代码称为异常处理程序。传播异常的整个过程称为 “抛出异常”(或“引发异常”)。通过实例化 NSException 对象,然后对其执行以下两项操作之一,可以抛出(或引发)异常:

    NSException* myException = [NSException
    exceptionWithName:@"FileNotFoundException"
    reason:@"File Not Found on System"
    userInfo:nil];
    @throw myException;
    // [myException raise]; /* equivalent to above directive */

@throw 和 raise 的一个重要区别是后者只能发送到 NSException 对象,而@throw 可以将其他类型的对象作为其参数(如字符串对象)。Cocoa 应用程序应该只能抛出NSException 对象。
通常在异常处理域内抛出或引发异常,该域是由@try 汇编指令标记的代码块。
有关详细信息,请参阅《处理异常》
在异常处理域中,你可以通过向 NSException 对象发送另 一个引发消息或将其与另一个@throw 指令一起使用,将本地异常处理程序捕获的异常重新传播到更高级别的处理程序。请注意,在@catch 异常处理块中,可以在不显示指定异常对象的情况下重新引发异常,如下例所示:

    @try {
    NSException *e = [NSException
    exceptionWithName:@"FileNotFoundException"
    reason:@"File Not Found on System"
    userInfo:nil];
    @throw e;
    }
    @catch(NSException *e) {
    @throw; // rethrows e implicitly
    }

行为中有一个微妙的方面涉及到重新抛出的异常。在@throw 导致调用下一个更高的异常处理程序之前,将执行与本地@catch 异常处理程序关联@finally 块。在某种意义上,@finally 块是作为@throw 语句的早起副作用执行的。此行为对内存管理有影响(请参阅《异常处理和内存管理》)。

翻译源:

上一篇 下一篇

猜你喜欢

热点阅读