Когда использовать Grand Central Dispatch (GCD) в iOS?

«Когда использовать Grand Central Dispatch (GCD) в iOS?» — вопрос из категории Многопоточность, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Grand Central Dispatch (GCD) — это низкоуровневый фреймворк для управления параллельным и асинхронным выполнением задач. Используйте его для:

  • Выполнения задач вне главного потока. Чтобы не блокировать UI.
    DispatchQueue.global(qos: .userInitiated).async {
        // Тяжелая задача (парсинг, вычисления)
        let result = processData()
        DispatchQueue.main.async {
            // Возврат результата в главный поток для обновления UI
            updateUI(with: result)
        }
    }
  • Планирования отложенного выполнения.
    DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
        // Выполнится через 0.5 секунды
    }
  • Синхронизации доступа к общим ресурсам с использованием сериальных очередей (DispatchQueue(label: "com.sync.queue")) или семафоров (DispatchSemaphore).
  • Группировки асинхронных задач с помощью DispatchGroup для ожидания их завершения.

Когда выбрать OperationQueue вместо GCD:

  • Нужны зависимости между задачами (operationB.addDependency(operationA)).
  • Требуется возможность отмены (operation.cancel()) или наблюдения за состоянием задачи.
  • Задачи можно инкапсулировать в переиспользуемый объект (BlockOperation или кастомный подкласс Operation).

GCD — это основа для простых и эффективных асинхронных операций.