Sobes.tech
Middle+

Wat gebeurt er als je in AppDelegate op de hoofdthread 'dispatchQueue.main.sync' aanroept?

sobes.tech AI

Antwoord van AI

Er ontstaat een Deadlock (wederzijdse blokkering).

Uitleg:

  1. AppDelegate draait op de hoofdthread.
  2. dispatchQueue.main.sync probeert code uit te voeren op de hoofdthread synchron, dat wil zeggen, wacht tot de codeblok klaar is.
  3. Maar de hoofdthread is al bezig met het uitvoeren van AppDelegate en wacht op het voltooien van het blok in sync.
  4. Het blok in sync kan niet starten omdat de hoofdthread bezig is te wachten.

Kortom, de hoofdthread wacht op het blok, en het blok wacht op de vrijgave van de hoofdthread — er ontstaat een deadlock. De applicatie zal vastlopen.

Voorbeeld van code die een deadlock veroorzaakt:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    print("Applicatie gestart")

    // Deze aanroep veroorzaakt een deadlock
    DispatchQueue.main.sync {
        print("Deze code wordt nooit uitgevoerd")
    }

    print("Deze code wordt ook niet bereikt")

    return true
}