Sobes.tech
Middle+

¿Qué sucederá si en AppDelegate en el hilo principal se llama a 'dispatchQueue.main.sync'?

sobes.tech AI

Respuesta de la IA

Ocurre un Deadlock (bloqueo mutuo).

Explicación:

  1. AppDelegate funciona en el hilo principal.
  2. dispatchQueue.main.sync intenta ejecutar código en el hilo principal de forma síncrona, es decir, espera a que el bloque de código termine.
  3. Pero el hilo principal ya está ocupado ejecutando AppDelegate y espera a que el bloque en sync termine.
  4. El bloque en sync no puede comenzar a ejecutarse porque el hilo principal está ocupado esperando.

En resumen, el hilo principal espera a que termine el bloque, y el bloque espera que el hilo principal esté libre — se produce un bloqueo mutuo. La aplicación se congelará.

Ejemplo de código que provocará Deadlock:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    print("Aplicación iniciada")

    // Esta llamada provocará Deadlock
    DispatchQueue.main.sync {
        print("Este código nunca se ejecutará")
    }

    print("Este código tampoco se alcanzará")

    return true
}