Какие встроенные очереди (DispatchQueue) доступны в iOS?

«Какие встроенные очереди (DispatchQueue) доступны в iOS?» — вопрос из категории Многопоточность, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Grand Central Dispatch (GCD) доступны системные очереди с разными приоритетами Quality of Service (QoS):

1. Главная очередь (Main Queue)

  • Назначение: Все операции с пользовательским интерфейсом (UI).
  • Тип: Серийная (serial).
  • Использование:
    DispatchQueue.main.async {
    self.label.text = "Updated" // Обновление UI
    }

2. Глобальные параллельные очереди (Global Concurrent Queues)

  • Назначение: Фоновые задачи. Система управляет потоками автоматически.
  • Тип: Параллельные (concurrent).
  • Приоритеты (по убыванию важности):
    • .userInteractive — для анимаций или мгновенного отклика.
    • .userInitiated — действия, инициированные пользователем, требующие немедленного результата.
    • .default — средний приоритет по умолчанию.
    • .utility — длительные задачи (загрузка, обработка).
    • .background — задачи, невидимые пользователю (очистка, синхронизация).
DispatchQueue.global(qos: .utility).async {
    let data = fetchDataFromNetwork() // Длительная задача
    DispatchQueue.main.async { self.updateUI(with: data) }
}

3. Пользовательские очереди (Custom Queues)

  • Назначение: Создание собственных серийных или параллельных очередей для контроля и изоляции задач.
    let serialQueue = DispatchQueue(label: "com.app.serialQueue") // Серийная по умолчанию
    let concurrentQueue = DispatchQueue(label: "com.app.concurrentQueue", attributes: .concurrent)