Почему @catch в main.m не перехватывает UncaughtExceptions в iOS 8

Следующий код отлично справляется с перехватом исключений UncaughtException — по крайней мере, до iOS 8.

int main(int argc, char * argv[])
{
    @try {
        @autoreleasepool {
            return UIApplicationMain(argc, argv, nil, NSStringFromClass([MyAppDelegate class]));
        }
    }
    @catch (NSException *exception) {
        [[MyExceptionHandler sharedInstance] handleException:exception];
    }
}

Запустив тот же код на устройстве iOS 7, любые неперехваченные исключения обрабатываются блоком catch в main. Однако в iOS 8 он вообще не ловится.

Если я размещу этот код:

void onUncaughtException(NSException* exception)
{
    [[MyExceptionHandler sharedInstance] handleException:exception];
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  ....
  NSSetUncaughtExceptionHandler(&onUncaughtException);
}

в моем AppDelegate я могу поймать все исключения, как и ожидалось. Мне просто интересно, по какой причине подход @catch-in-main перестал работать в iOS 8 (или, возможно, это связано с 64-битной поддержкой)?

С уважением,

христианин


person ckibsen    schedule 03.06.2015    source источник


Ответы (1)