> Что делает dispatch_sync в GCD? (iOS, Swift)
Уровень: senior · Роль: mobile · Категория: Технические вопросы
Компании: Московская биржа, VK, Яндекс
Стек: iOS, Swift
> Пример ответа
dispatch_sync в GCD (Grand Central Dispatch) синхронно отправляет блок (замыкание) на указанную очередь и блокирует текущий поток до полного завершения выполнения этого блока. После завершения блока управление возвращается вызывающему коду.
Ключевые особенности:
- Синхронность: текущий поток ждет, пока задача не выполнится.
- Блокировка потока: если вызвать
dispatch_syncиз главного потока на главную очередь, произойдет взаимная блокировка (deadlock), так как очередь ждет освобождения потока, а поток ждет завершения задачи. - Использование: часто применяется для безопасного доступа к разделяемым ресурсам (например, через последовательную очередь) или для ожидания результата асинхронной операции.
Пример:
SWIFTlet serialQueue = DispatchQueue(label: "com.example.serial")serialQueue.async {// Долгая задача в фоне}serialQueue.sync {// Синхронное ожидание: текущий поток заблокирован, пока этот блок не выполнитсяprint("Выполнено синхронно")}// Код ниже выполнится только после завершения sync-блока
Важно: избегайте вызова dispatch_sync на той же очереди, где уже выполняется код (особенно на главной), чтобы не вызвать deadlock.
> Похожие задачи по mobile
Какие преимущества дает использование value types в Swift
Что такое сильные и слабые ссылки в iOS?
Какие существуют модификаторы доступа в Swift
В чем разница UIView и UIViewController в iOS и зачем нужен UIViewController
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью