Означает ли использование dispatch_get_main_queue(), что мой код будет в основном потоке?
Работает ли следующий код в основном потоке? "Основная очередь" относится к основному потоку?
dispatch_async(dispatch_get_main_queue(),
^{
// Some code
});
3 ответа
Асинхронная часть диспетчерской асинхронной синхронизации отличается от параллельной последовательной передачи. Async означает, что функция немедленно возвращается, синхронизация означает, что она будет ждать выполнения блока. Поскольку основной поток / очередь является последовательным, все будет выполняться по порядку - я полагаю, это означает, что, поскольку вы запрашиваете его асинхронную отправку в том же потоке, из которого вы отправляете, он немедленно вернется, дождитесь конец текущего цикла выполнения и все остальное в очереди, а затем выполнить ваш блок.
Это более полезно для внутренней очереди, чем для основного потока: вы можете обработать свои данные, сообщить пользовательскому интерфейсу об обновлении и продолжить обработку, не дожидаясь перерисовки всего, и т. Д. Вот почему вы часто будете видеть dispatch_async вызов основного потока внутри другого dispatch_async (параллельной очереди) вместо просто dispatch_sync.
Да. С сайта разработчика Apple:
Среда диспетчеризации предоставляет последовательную очередь по умолчанию для использования приложением. Эта очередь доступна через dispatch_get_main_queue().
Это задокументировано в нескольких местах, включая документы для dispatch_get_main_queue()
сам. Руководство по программированию параллелизма гласит:
Основная очередь отправки - это глобально доступная последовательная очередь, которая выполняет задачи в главном потоке приложения.