object-c的异常处理机制
一直听说iOS有异常处理机制,却从来没有关系过,今天小生就来关心下iOS的异常处理机制吧。
Cup *cup = [[Cup alloc] init];
@try { [cup fill];
} @catch (NSException *exception) {
NSLog(@"main: Caught %@: %@", [exception name], [exception reason]);
} @finally {
[cup release];
}
抛出异常
为了掷出一个异常,我们必须实例化一个对象,当然这个对象要包含相关的信息,比如异常的名字和为什么要掷出他。
NSException *exception = [NSException exceptionWithName:@"HotTeaException" reason:@"The tea is too hot" userInfo:nil];
@throw exception;
(好吧 我承认国外的程序员挺有爱的。)
和@catch()块相反,你可以使用@throw再次掷出一个被抓到的异常,不用加参数哦亲。这个能使你的代码更可读。(我怎么没看出来)
Listing 9-1An exception handler @try {
...
} @catch (CustomException *ce) { //1
...
} @catch (NSException *ne) { //2
// Perform processing necessary at this level. ...
// Rethrow the exception so that it's handled at a higher level. @throw;
} @catch (id ue) { //3
...
} @finally { //4
// Perform processing necessary whether an exception occurred or not. ...
}