Назад к вопросам
Middle+
78
questionbank

Что произойдёт, если в AppDelegate в основном потоке вызвать 'dispatchQueue.main.sync'?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Произойдёт Deadlock (взаимная блокировка).

Объяснение:

  1. AppDelegate работает на главном потоке.
  2. dispatchQueue.main.sync пытается выполнить код в главном потоке синхронно, т.е. ждёт завершения выполнения блока кода.
  3. Но главный поток уже занят выполнением AppDelegate и ожидает, пока блок в sync завершится.
  4. Блок в sync не может начать выполнение, потому что главный поток занят ожиданием.

В итоге, главный поток ждёт выполнения блока, а блок ждёт освобождения главного потока — возникает взаимная блокировка. Приложение зависнет.

Пример кода, который вызовет Deadlock:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    print("Приложение запущено")

    // Этот вызов вызовет Deadlock
    DispatchQueue.main.sync {
        print("Этот код никогда не будет выполнен")
    }

    print("Этот код тоже не будет достигнут")

    return true
}