Ответ
В iOS есть три основных подхода:
-
Grand Central Dispatch (GCD) — низкоуровневый C-API для управления очередями.
// Отправка задачи в глобальную фоновую очередь DispatchQueue.global(qos: .userInitiated).async { // Выполнение тяжелой операции let result = processData() // Возврат в главную очередь для обновления UI DispatchQueue.main.async { updateUI(with: result) } } -
OperationQueue — высокоуровневая абстракция на основе GCD, поддерживающая зависимости, отмену и приоритеты.
let queue = OperationQueue() queue.maxConcurrentOperationCount = 2 let operation = BlockOperation { // Выполнение задачи } operation.completionBlock = { print("Готово!") } queue.addOperation(operation) -
Swift Concurrency (async/await) — современный подход, представленный в Swift 5.5.
Task { // Асинхронный вызов let data = await fetchDataFromNetwork() // Автоматически возвращается в MainActor для UI-обновлений updateView(with: data) }
Когда что использовать:
- GCD: Для простых фоновых задач и приоритизации (QoS).
- OperationQueue: Для сложных рабочих процессов с зависимостями между задачами.
- async/await: Для нового кода, требующего читаемости и интеграции с акторами (Actor).