Sobes.tech
Middle+

Τι θα συμβεί αν στο AppDelegate στο κύριο νήμα καλέσετε 'dispatchQueue.main.sync';

sobes.tech AI

Απάντηση από AI

Παρατηρείται Deadlock (αμοιβαίος αποκλεισμός).

Εξήγηση:

  1. Το AppDelegate λειτουργεί στο κύριο νήμα.
  2. Το dispatchQueue.main.sync προσπαθεί να εκτελέσει κώδικα στο κύριο νήμα συγχρονικά, δηλαδή περιμένει να ολοκληρωθεί το μπλοκ κώδικα.
  3. Αλλά το κύριο νήμα είναι ήδη απασχολημένο με την εκτέλεση του AppDelegate και περιμένει να τελειώσει το μπλοκ στο sync.
  4. Το μπλοκ στο sync δεν μπορεί να ξεκινήσει επειδή το κύριο νήμα περιμένει.

Εν ολίγοις, το κύριο νήμα περιμένει το μπλοκ να ολοκληρωθεί, και το μπλοκ περιμένει την απελευθέρωση του κύριου νήματος — δημιουργείται deadlock. Η εφαρμογή θα κολλήσει.

Παράδειγμα κώδικα που θα προκαλέσει deadlock:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    print("Εκκινήθηκε η εφαρμογή")

    // Αυτό το κάλεσμα θα προκαλέσει deadlock
    DispatchQueue.main.sync {
        print("Αυτός ο κώδικας δεν θα εκτελεστεί ποτέ")
    }

    print("Αυτός ο κώδικας επίσης δεν θα φτάσει")

    return true
}