Middle+
Τι θα συμβεί αν στο AppDelegate στο κύριο νήμα καλέσετε 'dispatchQueue.main.sync';
sobes.tech AI
Απάντηση από AI
Παρατηρείται Deadlock (αμοιβαίος αποκλεισμός).
Εξήγηση:
- Το
AppDelegateλειτουργεί στο κύριο νήμα. - Το
dispatchQueue.main.syncπροσπαθεί να εκτελέσει κώδικα στο κύριο νήμα συγχρονικά, δηλαδή περιμένει να ολοκληρωθεί το μπλοκ κώδικα. - Αλλά το κύριο νήμα είναι ήδη απασχολημένο με την εκτέλεση του
AppDelegateκαι περιμένει να τελειώσει το μπλοκ στοsync. - Το μπλοκ στο
syncδεν μπορεί να ξεκινήσει επειδή το κύριο νήμα περιμένει.
Εν ολίγοις, το κύριο νήμα περιμένει το μπλοκ να ολοκληρωθεί, και το μπλοκ περιμένει την απελευθέρωση του κύριου νήματος — δημιουργείται deadlock. Η εφαρμογή θα κολλήσει.
Παράδειγμα κώδικα που θα προκαλέσει deadlock:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
print("Εκκινήθηκε η εφαρμογή")
// Αυτό το κάλεσμα θα προκαλέσει deadlock
DispatchQueue.main.sync {
print("Αυτός ο κώδικας δεν θα εκτελεστεί ποτέ")
}
print("Αυτός ο κώδικας επίσης δεν θα φτάσει")
return true
}