Middle
Mis on dispatch grupp iOS arenduse kontekstis?
sobes.tech AI
Vastus AI-lt
DispatchGroup on GCD (Grand Central Dispatch) mehhanism, mis võimaldab jälgida asünkroonsete ülesannete grupi lõpetamist ja teha tegevust pärast nende lõpetamist. Kasulik, kui on vaja koordineerida mitme juhtimisjärje või voolu tööd.
Peamised meetodid:
enter(): teatab grupile, et ülesanne on alanud. suurendab grupi sisemist loendurit.leave(): teatab grupile, et ülesanne on lõpetatud. vähendab loendurit.wait(): lukustab praeguse voolu kuni grupi loendur jõuab nulli või aeg lõpeb.notify(queue:execute:): registreerib koodibloki, mis täidetakse asünkroonselt määratud järjekorras, kui grupi loendur jõuab nulli.
Näide notify kasutamisest:
import Foundation
let group = DispatchGroup()
let queue = DispatchQueue.global(qos: .userInitiated)
queue.async(group: group) {
// Esimene asünkroonne ülesanne
print("Ülesanne 1 käib...")
Thread.sleep(forTimeInterval: 1)
print("Ülesanne 1 lõpetatud.")
}
queue.async(group: group) {
// Teine asünkroonne ülesanne
print("Ülesanne 2 käib...")
Thread.sleep(forTimeInterval: 2)
print("Ülesanne 2 lõpetatud.")
}
// Käivita see plokk pärast kõigi ülesannete lõpetamist
group.notify(queue: .main) {
print("Kõik ülesanded grupis on lõpetatud.")
}
// Näitena — notify mitte blokeeriv olemus
print("Pärast ülesannete lisamist")
Alternatiivne näide käsitsi enter() ja leave() kasutamisega:
import Foundation
let group = DispatchGroup()
let queue = DispatchQueue.global(qos: .userInitiated)
group.enter() // Ülesanne 1 algas
queue.async {
print("Ülesanne 1 käib...")
Thread.sleep(forTimeInterval: 1)
print("Ülesanne 1 lõpetatud.")
group.leave() // Ülesanne 1 lõpetatud
}
group.enter() // Ülesanne 2 algas
queue.async {
print("Ülesanne 2 käib...")
Thread.sleep(forTimeInterval: 2)
print("Ülesanne 2 lõpetatud.")
group.leave() // Ülesanne 2 lõpetatud
}
group.notify(queue: .main) {
print("Kõik ülesanded notify abil lõpetatud.")
}
// Näide kasutades `wait`-i (blokeeriv)
// group.wait()
// print("Kõik ülesanded lõpetatud wait-iga.")