Я тестирую исключения, используя в java и программах dobjective-C.
В этих тестах я вижу разницу в способе достижения блока finally, когда исключение перехватывается и перебрасывается.
Вот мой тест Java:
try {
Boolean bThrow = true;
System.out.println("try : before exception sent");
if (bThrow) {
throw new Exception();
}
System.out.println("try : after sent");
}
catch (Exception e) {
System.out.println("catch, rethrow");
throw e;
}
finally {
System.out.println("finally");
}
, который отображает:
try: before exception sent
catch, rethrow
finally
А вот мой тест target-c:
@try {
NSException *myexc = [NSException exceptionWithName:@"exceptionTest" reason:@"exceptionTest" userInfo:nil];
BOOL bThrow = YES;
NSLog(@"try : before exception sent");
if (bThrow) {
@throw myexc;
}
NSLog(@"try : after sent");
}
@catch (Exception *exception) {
NSLog(@"catch, rethrow");
@throw exception;
}
@finally {
NSLog(@"finally");
}
, который отображает:
try: before exception sent
catch, rethrown
*** Terminating app
Код в блоке finally не достигнут!
Почему эта разница?
[EDIT] Извините, @try ... @try ... @try ... была ошибка.Я изменил его, но проблема та же, я не могу достичь, наконец, блока в тесте target-c