Вопрос проверяет понимание потоков выполнения и влияния асинхронных задач на интерфейс приложения.
Main queue используется для обновления интерфейса и обработки пользовательских событий. Background queue предназначена для тяжелых и длительных операций. Выполнение тяжелой логики на main queue приводит к зависанию UI. Фоновая очередь не имеет доступа к UI напрямую. Корректное разделение задач критично для производительности.
Разделение задач между main и background очередями — фундамент iOS-разработки.
Main queue — это очередь, связанная с главным потоком приложения.
На ней выполняется:
Обновление UI.
Обработка touch-событий.
Жизненный цикл UIViewController.
Особенности:
последовательная;
чувствительна к блокировкам;
любое долгое выполнение приводит к фризам.
Пример:
DispatchQueue.main.async {
self.label.text = "Updated"
}
Background queue используется для задач, не связанных с UI.
Типичные задачи:
Сетевые запросы.
Парсинг данных.
Сложные вычисления.
Работа с файлами.
Пример:
DispatchQueue.global(qos: .userInitiated).async {
let result = heavyCalculation()
}
Перед выводом важно подчеркнуть ключевую мысль:
UI должен оставаться отзывчивым;
тяжелая логика не должна мешать пользователю.
Нарушение этого правила — одна из самых частых ошибок новичков.
Main queue предназначена только для UI и быстрых операций. Любая потенциально долгая задача должна выполняться в background queue с возвратом результата на main.