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