Что такое DispatchQoS в GCD?

«Что такое DispatchQoS в GCD?» — вопрос из категории Многопоточность, который задают на 22% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

DispatchQoS (Quality of Service) — это система приоритетов в Grand Central Dispatch (GCD), которая указывает системе на важность задачи. Это помогает в планировании, управлении энергопотреблением и распределении ресурсов (CPU, I/O).

Основные классы QoS (от высшего к низшему приоритету):

Класс QoS Назначение Пример использования
.userInteractive Задачи, напрямую влияющие на UI, требующие мгновенного отклика. Анимации, обновление интерфейса в реальном времени.
.userInitiated Задачи, инициированные пользователем, которые должны завершиться быстро. Обработка нажатия кнопки, загрузка данных для отображения.
.default Стандартный приоритет (между .userInitiated и .utility). Используется по умолчанию, если QoS не указан.
.utility Длительные задачи, о ходе которых пользователь может быть проинформирован. Экспорт данных, загрузка контента, периодические обновления.
.background Задачи, невидимые для пользователя, время выполнения не критично. Индексация, синхронизация, предварительная загрузка.

Пример использования:

// Выполнение ресурсоемкой задачи с высоким приоритетом
DispatchQueue.global(qos: .userInitiated).async {
    let processedData = self.processLargeDataset()
    // Возврат на главный поток для обновления UI
    DispatchQueue.main.async {
        self.updateUI(with: processedData)
    }
}