Можно ли вызывать executeSelectorOnMainThread: после вызова beginBackgroundTaskWithExpirationHandler и приложения в фоновом режиме?

Я запускаю фоновую задачуследующим образом:

UIApplication* application = [UIApplication sharedApplication];
_backgroundTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^
                           {
                               [application endBackgroundTask:_backgroundTask];
                               _backgroundTask = UIBackgroundTaskInvalid;
                           }];

Приложение отправляется в фоновый режим, и все в порядке.

Через некоторое время выполняется определенное условие, и какой-то объект выполняет этот код:

[self performSelectorOnMainThread:@selector(doSomething) withObject:nil waitUntilDone:YES];

В этот момент приложение вылетает!

Обратите внимание, что в данном конкретном случае объект выполняется в основном потоке.

Заменил приведенный выше код на этот:

    dispatch_async(dispatch_get_main_queue(), ^{
        [self doSomething];
    });

И вроде все ОК, вылет пропал.

Что я могу себе представить, так это то, что waitUntilDone:YES может быть здесь разницей, но это только мое внутреннее чувство.

Мой вопрос:

Можно ли использовать PerformSelectorOnMainThread:withObject:waitUntilDone:YES, когда приложение работает в фоновом режиме?

Если это так, то почему происходит сбой приложения и почему dispatch_async решил проблему?

Заранее спасибо!

6
задан James Webster 1 September 2013 в 12:01
поделиться