Ответ
DispatchQueue.main — это serial (последовательная) очередь.
Ключевые особенности:
- Serial Execution: Задачи (
tasks) выполняются строго одна за другой, в порядке их добавления. - Связь с потоком: Это очередь главного потока (Main Thread). Весь UI-код должен выполняться на ней.
Типичное использование для обновления UI:
// После асинхронной операции (сеть, вычисления)
DispatchQueue.global().async {
let result = performHeavyCalculation()
// Возвращаемся на главную очередь для обновления интерфейса
DispatchQueue.main.async {
self.updateUI(with: result)
}
}
Важные предупреждения:
- Избегайте
syncна главной очереди: ВызовDispatchQueue.main.syncиз главного потока приведет к взаимной блокировке (deadlock), так как поток будет ждать завершения задачи, которую сам же должен выполнить. - Не блокируйте главную очередь: Длительные синхронные операции на
mainприведут к "зависанию" интерфейса.
Альтернативы для фоновых задач: Используйте DispatchQueue.global() (concurrent) или создавайте свои custom очереди.