NS_HANDLER и NS_ENDHANDLER не работают в Objective- C - PullRequest
0 голосов
/ 10 января 2020

Написал простой код для проверки обработки исключений в 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.");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...