Я запускаю фоновую задачуследующим образом:
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 решил проблему?
Заранее спасибо!