Использует ли dispatch_get_main_queue(), что мой код будет в основном потоке? - программирование
Подтвердить что ты не робот

Использует ли dispatch_get_main_queue(), что мой код будет в основном потоке?

Выполняется ли следующий код в основном потоке? "Основная очередь" относится к основному потоку?

dispatch_async(dispatch_get_main_queue(),
^{
   // Some code
});
4b9b3361

Ответ 1

Асинхронная часть отправки async vs sync отличается от параллельной и последовательной. Async означает, что функция возвращается немедленно, синхронизация означает, что она будет ждать, пока блок не будет выполнен. Поскольку основной поток/очередь является серийным, все будет выполнено в порядке - я считаю, что это означает, что, поскольку вы просите его отправить асинхронную отправку в тот же поток, из которого вы отправляете, он немедленно вернется, дождитесь конец текущего цикла цикла и все остальное в очереди, а затем выполните ваш блок.

Это более полезно для внутренней очереди, чем в основном потоке, - вы можете обрабатывать свои данные, позволять пользовательскому интерфейсу знать, обновлять и продолжать обработку, не дожидаясь, пока все будет перерисовано, и т.д. Поэтому вы часто будете см. вызов dispatch_async для основного потока внутри другого dispatch_async (параллельная очередь) вместо просто dispatch_sync.

Ответ 2

Да. Из сайта разработчика Apple:

Структура отправки обеспечивает серийную очередь по умолчанию для приложение для использования. Доступ к этой очереди осуществляется через dispatch_get_main_queue().