Назад к вопросам
Middle+
78
questionbank
Что произойдёт, если в AppDelegate в основном потоке вызвать 'dispatchQueue.main.sync'?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Произойдёт Deadlock (взаимная блокировка).
Объяснение:
AppDelegateработает на главном потоке.dispatchQueue.main.syncпытается выполнить код в главном потоке синхронно, т.е. ждёт завершения выполнения блока кода.- Но главный поток уже занят выполнением
AppDelegateи ожидает, пока блок вsyncзавершится. - Блок в
syncне может начать выполнение, потому что главный поток занят ожиданием.
В итоге, главный поток ждёт выполнения блока, а блок ждёт освобождения главного потока — возникает взаимная блокировка. Приложение зависнет.
Пример кода, который вызовет Deadlock:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
print("Приложение запущено")
// Этот вызов вызовет Deadlock
DispatchQueue.main.sync {
print("Этот код никогда не будет выполнен")
}
print("Этот код тоже не будет достигнут")
return true
}