Sobes.tech
Middle+

Agar AppDelegate'da asosiy oqimda 'dispatchQueue.main.sync' chaqirilsa nima bo'ladi?

sobes.tech AI

AIdan javob

Deadlock (o'zaro bloklanish) yuz beradi.

Tushuntirish:

  1. AppDelegate asosiy oqimda ishlaydi.
  2. dispatchQueue.main.sync kodni sinxron tarzda asosiy oqimda bajarishga harakat qiladi, ya'ni blok bajarilishi tugashini kutadi.
  3. Ammo asosiy oqim allaqachon AppDelegateni bajarishda va sync blokining tugashini kutmoqda.
  4. sync blok boshlanishi mumkin emas, chunki asosiy oqim kutmoqda.

Qisqacha aytganda, asosiy oqim blokni bajarilishini kutmoqda, va blok esa asosiy oqim erkin bo'lishini kutmoqda — bu o'zaro bloklanishga olib keladi. Dastur to'xtab qoladi.

Deadlockni keltirib chiqaradigan kod misoli:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    print("Dastur ishga tushdi")

    // Bu chaqiruv Deadlockga olib keladi
    DispatchQueue.main.sync {
        print("Bu kod hech qachon bajarilmaydi")
    }

    print("Bu kod ham yetib borilmaydi")

    return true
}