try块内发生了什么?

时间:2010-06-10 09:07:35

标签: objective-c

示例:

@try {
    // 1) do bad stuff that can throw an exception...

    // 2) do some more stuff

    // 3) ...and more...
}
@catch (NSException *e) {
    NSLog(@"Error: %@: %@", [e name], [e reason]);
}

如果1)抛出异常,该块是否会立即取消,如函数返回或循环中断?或者2)和3)将被处理,无论1)中发生什么?

1 个答案:

答案 0 :(得分:4)

如果发生异常,则块的执行立即中断,并且@catch部分(如果它处理适当的异常类型)被执行。

示例代码:

@try {
    NSArray* arr = [NSArray arrayWithObjects:@"1", @"2", @"3", nil];
    NSLog([arr objectAtIndex: 0]);
    NSLog([arr objectAtIndex: 5]);
    NSLog(@"Lala");
}
@catch (NSException * e) {
    NSLog(@"%@, %@", [e name], [e reason]);
}

Output:
1
NSRangeException, *** -[NSCFArray objectAtIndex:]: index (5) beyond bounds (3)