Sobes.tech
Middle+

Čo sa stane, ak v AppDelegate v hlavnom vlákne zavoláte 'dispatchQueue.main.sync'?

sobes.tech AI

Odpoveď od AI

Vznikne Deadlock (vzájomné blokovanie).

Vysvetlenie:

  1. AppDelegate beží na hlavnom vlákne.
  2. dispatchQueue.main.sync sa pokúša vykonať kód na hlavnom vlákne synchronne, teda čaká na dokončenie bloku.
  3. No hlavné vlákno je už zaneprázdnené vykonávaním AppDelegate a čaká, kým sa blok v sync neskončí.
  4. Blok v sync nemôže začať, pretože hlavné vlákno je zaneprázdnené čakaním.

Stručne povedané, hlavné vlákno čaká na dokončenie bloku, a blok čaká na uvoľnenie hlavného vlákna — vzniká deadlock. Aplikácia sa zasekne.

Príklad kódu, ktorý spôsobí deadlock:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    print("Aplikácia spustená")

    // Tento volanie spôsobí deadlock
    DispatchQueue.main.sync {
        print("Tento kód sa nikdy nevykoná")
    }

    print("Tento kód tiež nebude dosiahnutý")

    return true
}