Middle+
Эгерде AppDelegateде негизги агымда 'dispatchQueue.main.sync' чакырылса, эмне болот?
sobes.tech AI
AIден жооп
Майда болуу (өз ара блоктоо) пайда болот.
Түшүндүрүү:
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
}