Middle+
Co se stane, pokud v AppDelegate v hlavním vlákně zavoláte 'dispatchQueue.main.sync'?
sobes.tech AI
Odpověď od AI
Vznikne Deadlock (vzájemné blokování).
Vysvětlení:
AppDelegateběží na hlavním vlákně.dispatchQueue.main.syncse pokouší spustit kód na hlavním vlákně synchronně, tj. čeká na dokončení bloku kódu.- Ale hlavní vlákno je již zabráno vykonáváním
AppDelegatea čeká, až blok vsyncskončí. - Blok v
syncnemůže začít, protože hlavní vlákno je zaneprázdněno čekáním.
Stručně řečeno, hlavní vlákno čeká na dokončení bloku, a blok čeká na uvolnění hlavního vlákna — vzniká deadlock. Aplikace se zasekne.
Příklad kódu, který způsobí deadlock:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
print("Aplikace spuštěna")
// Tato volání způsobí deadlock
DispatchQueue.main.sync {
print("Tento kód se nikdy nevykoná")
}
print("Tento kód také nebude dosažen")
return true
}