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