Sobes.tech
Middle+

Эгерде AppDelegateде негизги агымда 'dispatchQueue.main.sync' чакырылса, эмне болот?

sobes.tech AI

AIден жооп

Майда болуу (өз ара блоктоо) пайда болот.

Түшүндүрүү:

  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
}