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 {
}