@try @catch之间的过渡

时间:2013-07-24 02:54:51

标签: objective-c

我很难理解从@ try到@ catch

的过渡

据我所知,如果来自@try块的语句抛出异常,则会执行@catch块。我不明白包含异常信息的NSException对象如何作为参数传递。我正在网上阅读有关异常的很多内容都会跳过这个细节。

我书中的例子是

@try {
    [myArray objectAtIndex: 2];
}

@catch (NSException *exception){
    NSLog(@"Caught %@%@", exception.name, exception.reason);
}

因此,一旦检测到异常,就会自动创建一个异常对象并将其发送到@catch块?

2 个答案:

答案 0 :(得分:0)

Try and Catch用于异常处理。只要try块中发生错误,编译器就会跳转到相应的Catch块并将Exception对象传递给它。 我们只需访问异常对象即可了解错误的详细信息。

答案 1 :(得分:0)

是。发生错误时,将检查callstack生成的stack frames,以验证是否存在带有'catch'块的'try'语句。当它找到时,实例化包含执行上下文的Exception对象(例如关于callstack的上下文,线程和有关错误的详细信息),并将此对象作为参数传递给catch块。


提示:验证在objective-c中重新抛出异常的最佳实践。在C#中,我知道重新抛出操作can change scope of the exception

希望它有所帮助。