Для случая асинхронной отправки, который вы описали выше, вам не нужно проверять, находитесь ли вы в главном потоке.Как указывает Bavarious, это будет просто поставлено в очередь для запуска в главном потоке.
Однако, если вы попытаетесь сделать это с помощью dispatch_sync()
и ваш обратный вызов находится в главном потоке, ваше приложение будеттупик в этой точке.Я описываю это в своем ответе здесь , потому что это поведение удивило меня при перемещении некоторого кода из -performSelectorOnMainThread:
.Как я уже упоминал, я создал вспомогательную функцию:
void runOnMainQueueWithoutDeadlocking(void (^block)(void))
{
if ([NSThread isMainThread])
{
block();
}
else
{
dispatch_sync(dispatch_get_main_queue(), block);
}
}
, которая будет синхронно запускать блок в основном потоке, если используемый вами метод в данный момент не находится в основном потоке, а просто выполняетвстроенный блок, если это так.Вы можете использовать синтаксис, подобный следующему, чтобы использовать это:
runOnMainQueueWithoutDeadlocking(^{
//Do stuff
});