Middle
Mesélj a vezérlő életciklusairól és arról, hogyan hívják őket.
sobes.tech MI
Válasz az MI-től
Az UIViewController életciklusa olyan metódusokat foglal magában, amelyek meghívásra kerülnek annak létezésének meghatározott pillanataiban: a létrehozástól a megsemmisítésig.
Az életciklus fő metódusai:
-
viewDidLoad():- Akkor hívódik meg, miután a vezérlő nézete betöltődött a memóriába, de még nem jelenik meg a képernyőn.
- Az adatok inicializálására, UI-elemek beállítására szolgál, amelyek nem függenek a nézet geometriájától.
- Csak egyszer hívódik meg a vezérlő életében.
-
viewWillAppear(_ animated: Bool):- Közvetlenül a vezérlő nézetének megjelenése előtt hívódik meg.
- Olyan feladatokra használható, amelyek minden alkalommal, amikor a nézet láthatóvá válik, végrehajtásra kerülnek (pl. adatok frissítése, animációk).
- Többször is meghívható.
-
viewDidAppear(_ animated: Bool):- Miután a nézet teljesen megjelent a képernyőn, meghívódik.
- Alkalmas animációk indítására vagy más feladatokra, amelyek megkövetelik, hogy a nézet teljesen készen álljon.
- Többször is meghívható.
-
viewWillDisappear(_ animated: Bool):- Közvetlenül a nézet eltávolítása előtt hívódik meg (pl. másik képernyőre való váltáskor).
- A nézet nem látható állapotában végrehajtandó feladatok, például állapot mentése vagy időzítők leállítása céljából használható.
- Többször is meghívható.
-
viewDidDisappear(_ animated: Bool):- Miután a nézet teljesen eltávolításra került a képernyőről, meghívódik.
- Erőforrások tisztítására vagy olyan feladatok leállítására, amelyek már nem szükségesek, amikor a nézet nem látható.
- Többször is meghívható.
-
viewWillLayoutSubviews():- Azt megelőzően hívódik meg, hogy a vezérlő elkezdi elrendezni az alnézeteket.
- A constraint-ek vagy keretek módosítására szolgál az automatikus elrendezés előtt.
- Többször is meghívható.
-
viewDidLayoutSubviews():- Miután a vezérlő befejezte az alnézetek elrendezését, meghívódik.
- Olyan feladatokra alkalmas, amelyek a végső méretektől függenek (pl. görgetősávok vagy árnyékok beállítása).
- Többször is meghívható.
-
didReceiveMemoryWarning():- Alacsony memóriaállapot esetén hívódik meg.
- Erőforrások felszabadítására használható, amelyek később újra létrehozhatók.
-
deinit:- Közvetlenül azelőtt hívódik meg, hogy a
UIViewControllerobjektum megsemmisül és felszabadul a memóriából. - Utolsó tisztítási feladatok végrehajtására, például megfigyelők (observers) törlésére vagy hálózati kapcsolatok lezárására.
- Közvetlenül azelőtt hívódik meg, hogy a
Hívási sorrend:
A vezérlő megjelenésekor a metódusok tipikus hívási sorrendje:
viewDidLoad()viewWillAppear(_ animated: Bool)viewWillLayoutSubviews()viewDidLayoutSubviews()viewDidAppear(_ animated: Bool)
A vezérlő eltűnésekor a metódusok tipikus hívási sorrendje:
viewWillDisappear(_ animated: Bool)viewDidDisappear(_ animated: Bool)deinit(ha már nincs szükség rá)
Implementációs példa:
import UIKit
class MyViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// UI beállítása, adatok inicializálása
print("viewDidLoad")
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// UI frissítése megjelenés előtt
print("viewWillAppear")
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
// Megjelenés befejeződött, animációk indítása
print("viewDidAppear")
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
// Előkészítés az eltávolításra, állapot mentése
print("viewWillDisappear")
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
// Eltávolítás befejeződött, erőforrások tisztítása
print("viewDidDisappear")
}
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
// Az auto layout előtt
print("viewWillLayoutSubviews")
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
// Az auto layout után
print("viewDidLayoutSubviews")
}
deinit {
// Erőforrások tisztítása
print("deinit")
}
}