Какие основные способы передачи и выполнения асинхронных задач в iOS?

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

Ответ

В iOS есть три основных подхода:

  1. Grand Central Dispatch (GCD) — низкоуровневый C-API для управления очередями.

    // Отправка задачи в глобальную фоновую очередь
    DispatchQueue.global(qos: .userInitiated).async {
        // Выполнение тяжелой операции
        let result = processData()
    
        // Возврат в главную очередь для обновления UI
        DispatchQueue.main.async {
            updateUI(with: result)
        }
    }
  2. OperationQueue — высокоуровневая абстракция на основе GCD, поддерживающая зависимости, отмену и приоритеты.

    let queue = OperationQueue()
    queue.maxConcurrentOperationCount = 2
    
    let operation = BlockOperation {
        // Выполнение задачи
    }
    operation.completionBlock = { print("Готово!") }
    
    queue.addOperation(operation)
  3. Swift Concurrency (async/await) — современный подход, представленный в Swift 5.5.

    Task {
        // Асинхронный вызов
        let data = await fetchDataFromNetwork()
        // Автоматически возвращается в MainActor для UI-обновлений
        updateView(with: data)
    }

Когда что использовать:

  • GCD: Для простых фоновых задач и приоритизации (QoS).
  • OperationQueue: Для сложных рабочих процессов с зависимостями между задачами.
  • async/await: Для нового кода, требующего читаемости и интеграции с акторами (Actor).