Вопрос проверяет понимание работы главного потока и влияния блокировок на UI.
Main queue выполняет UI-код и работает последовательно. Вызов sync блокирует главный поток. Если задача не может выполниться, UI зависает. В худшем случае возникает deadlock. Поэтому sync на main queue запрещен в обычной практике.
Главный поток — самый чувствительный ресурс в iOS-приложении.
Main queue:
обрабатывает пользовательские события
обновляет UI
выполняет lifecycle-методы
Любая блокировка здесь сразу заметна пользователю.
Блокирует главный поток
UI перестает отвечать.
Ждет выполнения блока
Но блок не может выполниться, если вызывается из main queue.
Приводит к зависанию или deadlock
DispatchQueue.main.sync {
updateUI()
}
Если код выполняется на main queue, приложение зависнет.
для UI использовать DispatchQueue.main.async
тяжелую работу выносить в фоновые очереди
синхронность обеспечивать архитектурно, а не блокировками
Вызов sync на main queue блокирует UI и легко приводит к deadlock, поэтому в реальных приложениях он считается антипаттерном.