0

我很难理解从 @try 到 @catch 的过渡

我知道如果 @try 块中的语句引发异常,则 @catch 块将被执行。我不明白包含异常信息的 NSException 对象是如何作为参数传递的。我在网上阅读的很多关于异常的东西都跳过了这个细节。

我书中的例子是

@try {
    [myArray objectAtIndex: 2];
}

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

那么一旦检测到异常,是否会自动创建异常对象并将其发送到@catch 块?

4

2 回答 2

0

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

于 2013-07-24T03:16:24.250 回答
0

是的。发生错误时,会检查调用堆栈生成的堆栈帧,以验证是否存在带有“catch”块的“try”语句。当它找到时,将实例化一个包含执行上下文的异常对象(例如有关调用堆栈、线程和有关错误的详细信息的上下文),并将该对象作为参数传递给 catch 块。


提示:验证在 Objective-c 中重新抛出异常的最佳实践。在 C# 中,我知道重新抛出操作可以改变异常的范围

希望能帮助到你。

于 2013-07-24T03:16:47.867 回答