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:
AppDelegatedraait op de hoofdthread.dispatchQueue.main.syncprobeert code uit te voeren op de hoofdthread synchron, dat wil zeggen, wacht tot de codeblok klaar is.- Maar de hoofdthread is al bezig met het uitvoeren van
AppDelegateen wacht op het voltooien van het blok insync. - Het blok in
synckan 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
}