Պետք է օգտագործել հիմնական հոսքը՝ շարունակելու համար, երբ կանչվում է ասինխրոն ֆունկցիա await-ով՝ ներսում այն գործառույթի, որը սկսվել է viewDidLoad մեթոդում?
sobes.tech AI
Պատասխան AI-ից
iOS-ում, եթե դուք կանչում եք ասինխրոն ֆունկցիա await-ով viewDidLoad-ում սկսված առաջադրանքի ներսում, կարևոր է հասկանալ, թե որ թելում կշարունակվի await-ից հետո:
Նախնական, եթե օգտագործում եք await Task-ի ներսում առանց առաջնահերթություններ կամ dispatcher-ներ նշելու, շարունակությունը կարող է տեղի ունենալ ցանկացած թելում, ոչ պարտադիր հիմնականում։ Սա կարող է առաջացնել խնդիրներ, եթե թարմացնում եք UI-ն, քանի որ բոլոր փոխհատուցումները պետք է կատարվեն հիմնական թելում:
Որպեսզի ապահովեք, որ await-ից հետո կոդը շարունակվի հիմնական թելում, կարող եք բացահայտ անցնել հիմնական dispatcher-ին await MainActor.run { ... }-ի միջոցով կամ օգտագործել @MainActor մեթոդի կամ դասի համար:
Օրինակ՝
override func viewDidLoad() {
super.viewDidLoad()
Task {
let data = await fetchData()
await MainActor.run {
self.updateUI(with: data)
}
}
}
Այսպիսով, անհրաժեշտ է օգտագործել հիմնական թելը շարունակելու համար, եթե պետք է աշխատել UI-ով ասինխրոնային օպերացիայի հետո։