0

我们使用以下代码引发异常:

[NSException raise:@"ExceptionName" format:@"XYZ"];

当引发异常时,调用堆栈也会登录控制台。我们不想在控制台中记录调用堆栈。如何避免这种情况。

4

1 回答 1

1

Cocoa 不能很好地与异常混合(惯用的 C++ 是另一回事)。您通常应该将异常视为 Cocoa 中的不可恢复。因此,您应该真正考虑 Cocoa 中另一种(更惯用的)错误处理形式。因此,简短的回答是:“不要抛出/引发异常,除非你不打算恢复”。


还不满意?

您有能力捕获异常并尝试继续:

#import <Foundation/Foundation.h>

static void A() {
    [NSException raise:@"ExceptionName" format:@"XYZ"];
}

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        @try {
            A();
        }
        @catch (NSException * e) {
            NSLog(@"e=mc%p", e);
            NSLog(@"What I meant to say is: %@", e);
        }
    }
    return 0;
}

此外,框架为您的目的提供了一些高级条目和自定义,如下所述——您可以设置掩码来自定义日志级别,或设置自己的未捕获异常处理程序。

于 2012-09-17T06:41:16.697 回答