Middle
Реци ми о циклусима живота контролера и како се позивају.
sobes.tech АИ
Одговор од АИ
Životni ciklus UIViewController uključuje metode koje se pozivaju u određenim trenucima njegovog postojanja: od kreiranja do uništenja.
Glavne metode životnog ciklusa:
-
viewDidLoad():- Poziva se nakon što je prikaz kontrolera učitan u memoriju, ali pre nego što bude prikazan na ekranu.
- Koristi se za inicijalizaciju podataka, podešavanje UI elemenata koji nisu zavisni od geometrije prikaza.
- Poziva se samo jednom tokom životnog veka kontrolera.
-
viewWillAppear(_ animated: Bool):- Poziva se neposredno pre nego što se prikaz kontrolera pojavi na ekranu.
- Koristi se za zadatke koji treba da se izvršavaju svaki put kada prikaz postane vidljiv (npr. osvežavanje podataka, animacije).
- Može se pozvati više puta.
-
viewDidAppear(_ animated: Bool):- Poziva se nakon što je prikaz kontrolera potpuno prikazan na ekranu i postao vidljiv korisniku.
- Pogodno za pokretanje animacija ili drugih zadataka koji zahtevaju da je prikaz potpuno spreman.
- Može se pozvati više puta.
-
viewWillDisappear(_ animated: Bool):- Poziva se neposredno pre nego što će prikaz kontrolera biti uklonjen sa ekrana (npr. pri prelazu na drugi ekran).
- Koristi se za čuvanje stanja ili zaustavljanje zadataka koji ne bi trebalo da se izvršavaju dok prikaz nije vidljiv (npr. zaustavljanje tajmera).
- Može se pozvati više puta.
-
viewDidDisappear(_ animated: Bool):- Poziva se nakon što je prikaz kontrolera potpuno uklonjen sa ekrana.
- Koristi se za čišćenje resursa ili zaustavljanje zadataka koji više nisu potrebni kada prikaz nije vidljiv.
- Može se pozvati više puta.
-
viewWillLayoutSubviews():- Poziva se pre nego što kontroler počne da raspoređuje svoje podprikaze.
- Koristi se za izmene u constraints ili okvirima pre automatskog rasporeda.
- Može se pozvati više puta.
-
viewDidLayoutSubviews():- Poziva se nakon što kontroler završi sa raspoređivanjem svojih podprikaza.
- Koristi se za zadatke koji zavise od konačnih dimenzija podprikaza (npr. podešavanje skrol indikatora ili senki).
- Može se pozvati više puta.
-
didReceiveMemoryWarning():- Poziva se pri niskom nivou memorije.
- Koristi se za oslobađanje resursa koji mogu biti ponovo kreirani kasnije.
-
deinit:- Poziva se neposredno pre nego što će objekat
UIViewControllerbiti uništen i oslobođen iz memorije. - Koristi se za izvršenje završnog čišćenja, na primer, brisanje posmatrača ili zatvaranje mrežnih veza.
- Poziva se neposredno pre nego što će objekat
Redosled poziva:
Tipičan redosled poziva metoda pri pojavljivanju kontrolera:
viewDidLoad()viewWillAppear(_ animated: Bool)viewWillLayoutSubviews()viewDidLayoutSubviews()viewDidAppear(_ animated: Bool)
Tipičan redosled poziva metoda pri nestanku kontrolera:
viewWillDisappear(_ animated: Bool)viewDidDisappear(_ animated: Bool)deinit(ako kontroler više nije potreban)
Primer implementacije:
import UIKit
class MyViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Podešavanje UI, inicijalizacija podataka
print("viewDidLoad")
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// Ažuriranje UI pre pojavljivanja
print("viewWillAppear")
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
// Nakon pojavljivanja, pokretanje animacija
print("viewDidAppear")
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
// Priprema za nestanak, čuvanje stanja
print("viewWillDisappear")
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
// Nestanak je završen, čišćenje
print("viewDidDisappear")
}
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
// Pre automatskog rasporeda
print("viewWillLayoutSubviews")
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
// Nakon automatskog rasporeda
print("viewDidLayoutSubviews")
}
deinit {
// Čišćenje resursa
print("deinit")
}
}