Sobes.tech
Junior — Middle

Czy możesz wymienić i wyjaśnić główne metody pracy z DispatchGroup w iOS?

sobes.tech AI

Odpowiedź od AI

DispatchGroup w iOS służy do grupowania wielu zadań asynchronicznych i śledzenia ich zakończenia. Główne metody i sposoby pracy z DispatchGroup:

  • enter() — informuje grupę, że rozpoczęło się nowe zadanie. Należy wywołać, jeśli zadanie jest uruchamiane ręcznie i nie przez group.async.
  • leave() — informuje grupę, że zadanie zostało zakończone. Liczba wywołań leave() powinna odpowiadać liczbie enter().
  • notify(queue: DispatchQueue, execute: () -> Void) — ustawia blok kodu, który zostanie wykonany na wskazanej kolejce po zakończeniu wszystkich zadań w grupie.
  • wait(timeout:) — oczekuje synchronicznie na zakończenie wszystkich zadań w grupie lub do upływu czasu oczekiwania.

Przykład użycia:

let group = DispatchGroup()

let queue = DispatchQueue.global()

group.enter()
queue.async {
    // Zadanie asynchroniczne 1
    print("Zadanie 1 rozpoczęte")
    sleep(2)
    print("Zadanie 1 zakończone")
    group.leave()
}

group.enter()
queue.async {
    // Zadanie asynchroniczne 2
    print("Zadanie 2 rozpoczęte")
    sleep(1)
    print("Zadanie 2 zakończone")
    group.leave()
}

group.notify(queue: DispatchQueue.main) {
    print("Wszystkie zadania zakończone")
}

W tym przykładzie dwa zadania wykonują się równolegle, a po ich zakończeniu wywoływany jest blok w notify. Taki sposób pozwala wygodnie synchronizować kilka operacji asynchronicznych.