Sobes.tech
Middle — Middle+

Ar galima atlikti operacijas su grafinės sąsajos elementais už pagrindinio srauto ribų programoje?

sobes.tech AI

Atsakymas iš AI

iOS, visos su grafinės sąsajos (UI) operacijos turi būti vykdomos tik pagrindiniame sraute (main thread). Tai susiję su tuo, kad UIKit nėra srautinė saugi, ir bet kokie UI pakeitimai iš foninių srautų gali sukelti nenuspėjamą elgesį arba programos avariją.

Jei reikia atnaujinti sąsają po foninio užduoties vykdymo, reikia grįžti atgal į pagrindinį srautą, pavyzdžiui, naudojant DispatchQueue.main.async:

DispatchQueue.global().async {
    // Foninė užduotis
    let data = fetchData()
    
    DispatchQueue.main.async {
        // UI atnaujinimas
        self.label.text = data
    }
}