Написал простой код для проверки обработки исключений в Objective- C,
, но коды после блока NS_HANDLER
не выполняются.
#include <stdio.h>
#include <Foundation/Foundation.h>
int main(void)
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NS_DURING
{
printf("This block works.\n");
NSException *exception = [[NSException alloc] initWithName: @"CustomException" reason: @"NoReason" userInfo: nil];
[exception raise];
[pool release];
}
NS_HANDLER
{
printf("Cannot reach here.\n");
if ([[localException name] isEqualToString: @"CustomException"])
printf("Catched: 'CustomException'.\n");
}
NS_ENDHANDLER
{
printf("Cannot reach here too.\n");
}
printf("This line does not executed too.\n");
return 0;
}
Когда я запускаю эту программу,
только NS_DURING
блок работает, а затем завершается.
При компиляции и запуске не генерируется предупреждение или ошибка.
Что я сделал не так?
Скомпилировано с использованием GNUstep на Windows 10.
ADD:
То же самое, когда я использовал директивы компилятора: @try, @catch , @ наконец.
@try {
NSLog(@"Try block works.");
NSException *exception = [[NSException alloc] initWithName: @"CustomException" reason: @"None" userInfo: nil];
[exception raise];
}
@catch (NSException *exception) {
NSLog([NSString stringWithFormat: @"Caught exception called: %s"], [exception name]);
}
@finally {
NSLog(@"Done handling exceptions.");
}