iOS-捕获异常

iOS系统的异常捕获。

异常捕获

iOS开发中,一般使用@try、 @catch、@finally代码块进行异常捕获。
举例:

@try {
    NSArray *ar = [NSArray new];
      ar[-1];
}@catch (NSException *exception) {
    //@throw exception;
}@finally {
}

可以在@catch里面继续往上@throw异常。

注意:

(1) 64位的处理器在进入Zero Cost Exception @try区域时,没有性能上的损耗,不像32位处理器,将调用setjmp()方法且导致额外的”bookKeeping”。然而,64位处理器上throw异常代价更加昂贵,如非必要,不要throw。

(2) 64位处理器上,NSException和C++ Exception是可以互相交互的。C++的析构器和OC的@finally可以处理任何异常。另外,C++的catch(…)和OC的@catch(…)可以捕获任何异常。
而,@catch(id exception)无法捕获C++的异常,所以,尽量使用@catch(…)。32位处理器上,@catch(id exception)和@catch(…)一致。

举例说明:

void C(){
    char *p = 0;
    throw p;
}

@try {
      C();
}@catch (...) {
    NSLog(@"exception");
}@finally {
}