Sobes.tech
Junior — Middle

Когда допустимо выполнять обновление пользовательского интерфейса вне основного потока исполнения?

sobes.tech AI

Răspuns de la AI

În iOS, actualizarea interfeței utilizatorului trebuie efectuată numai pe thread-ul principal, deoarece UIKit nu este sigur pentru thread-uri. O excepție poate fi atunci când utilizați mecanisme sau framework-uri speciale care permit actualizarea UI-ului asincron, dar în fundal, acestea se comută tot timpul pe thread-ul principal.

De exemplu, dacă încărcați date într-un thread de fundal, după ce obțineți rezultatul, trebuie să treceți pe thread-ul principal pentru a actualiza UI-ul:

DispatchQueue.global().async {
    // Încărcare date
    let data = loadData()
    DispatchQueue.main.async {
        // Actualizare UI
        self.label.text = data
    }
}

Prin urmare, actualizarea UI-ului în afara thread-ului principal este permisă doar dacă reveniți explicit pe thread-ul principal înainte de a modifica elementele interfeței.