Ответ
QoS (Quality of Service) — это механизм в Grand Central Dispatch (GCD) для указания приоритета и характера выполняемой задачи. Он помогает системе оптимально распределять ресурсы (процессорное время, энергопотребление).
Основные классы QoS (от высокого к низкому приоритету):
.userInteractive— для задач, напрямую влияющих на UI, которые должны выполняться мгновенно (анимации, обработка касаний). Использование для долгих задач заблокирует интерфейс..userInitiated— для задач, инициированных пользователем, результат которых нужен для продолжения работы (например, открытие документа)..utility— для длительных задач, о ходе которых пользователь информирован (загрузка данных, вычисления). Может сопровождаться индикатором прогресса..background— для задач, невидимых пользователю и не требующих немедленного завершения (индексация, синхронизация данных, предварительная загрузка).
Практический пример:
// Пользователь нажал кнопку — задача высокого приоритета
DispatchQueue.global(qos: .userInitiated).async {
let data = self.loadCriticalData() // Долгая операция
// Возвращаем результат в главный поток для обновления UI
DispatchQueue.main.async {
self.updateUI(with: data)
}
}
// Фоновая синхронизация — низкий приоритет
DispatchQueue.global(qos: .background).async {
self.syncDataWithServer() // Не блокирует пользователя
}
Ключевое правило: Всегда обновляйте UI в DispatchQueue.main. Правильный выбор QoS предотвращает блокировку главного потока и оптимизирует производительность и энергоэффективность приложения.