Middle
Povedz mi o životných cykloch ovládača a ako sa volajú.
sobes.tech AI
Odpoveď od AI
Životný cyklus UIViewController zahŕňa metódy volané v určitých momentoch jeho existencie: od vytvorenia po zničenie.
Hlavné metódy životného cyklu:
-
viewDidLoad():- Volá sa po načítaní pohľadu kontroléra do pamäte, pred jeho zobrazením na obrazovke.
- Používa sa na inicializáciu dát, nastavenie UI prvkov, ktoré nezávisia od geometrie pohľadu.
- Volá sa iba raz počas životnosti kontroléra.
-
viewWillAppear(_ animated: Bool):- Volá sa priamo pred tým, ako sa pohľad kontroléra objaví na obrazovke.
- Používa sa na vykonanie úloh, ktoré sa majú diať zakaždým, keď sa pohľad stáva viditeľným (napríklad aktualizácia dát, animácie).
- Môže sa volať niekoľkokrát.
-
viewDidAppear(_ animated: Bool):- Volá sa po úplnom zobrazení pohľadu na obrazovke a jeho sprístupnení používateľovi.
- Vhodné na spustenie animácií alebo iných úloh, ktoré vyžadujú, aby bol pohľad úplne pripravený.
- Môže sa volať niekoľkokrát.
-
viewWillDisappear(_ animated: Bool):- Volá sa priamo pred odstránením pohľadu z obrazovky (napríklad pri prechode na iný displej).
- Používa sa na uloženie stavu alebo zastavenie úloh, ktoré nemajú bežať, kým je pohľad neviditeľný (napríklad zastavenie časovačov).
- Môže sa volať niekoľkokrát.
-
viewDidDisappear(_ animated: Bool):- Volá sa po úplnom odstránení pohľadu z obrazovky.
- Používa sa na uvoľnenie zdrojov alebo zastavenie úloh, ktoré nie sú potrebné, keď je pohľad neviditeľný.
- Môže sa volať niekoľkokrát.
-
viewWillLayoutSubviews():- Volá sa pred začatím rozmiestňovania podzobrazení.
- Používa sa na úpravy v obmedzeniach alebo rámcoch pred vykonaním auto-rozloženia.
- Môže sa volať niekoľkokrát.
-
viewDidLayoutSubviews():- Volá sa po tom, ako kontrolér dokončí rozmiestňovanie podzobrazení.
- Používa sa na vykonanie úloh závislých od konečných rozmerov podzobrazení (napríklad nastavenie posuvníkov alebo tieňov).
- Môže sa volať niekoľkokrát.
-
didReceiveMemoryWarning():- Volá sa pri nízkej úrovni operačnej pamäte.
- Používa sa na uvoľnenie zdrojov, ktoré môžu byť neskôr znovu vytvorené.
-
deinit:- Volá sa priamo pred zničením a uvoľnením objektu
UIViewControllerz pamäte. - Používa sa na vykonanie záverečného čistenia, napríklad odstránenie pozorovateľov alebo zatvorenie sieťových spojení.
- Volá sa priamo pred zničením a uvoľnením objektu
Poradie volaní:
Typické poradie volaní metód pri zobrazení kontroléra:
viewDidLoad()viewWillAppear(_ animated: Bool)viewWillLayoutSubviews()viewDidLayoutSubviews()viewDidAppear(_ animated: Bool)
Typické poradie volaní metód pri zmiznutí kontroléra:
viewWillDisappear(_ animated: Bool)viewDidDisappear(_ animated: Bool)deinit(ak kontrolér už nie je potrebný)
Príklad implementácie:
import UIKit
class MyViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Nastavenie UI, inicializácia dát
print("viewDidLoad")
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// Aktualizácia UI pred zobrazením
print("viewWillAppear")
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
// Po zobrazení, spustenie animácií
print("viewDidAppear")
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
// Príprava na zmiznutie, uloženie stavu
print("viewWillDisappear")
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
// Zmiznutie dokončené, čistenie
print("viewDidDisappear")
}
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
// Pred auto-rozložením
print("viewWillLayoutSubviews")
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
// Po auto-rozložení
print("viewDidLayoutSubviews")
}
deinit {
// Čistenie zdrojov
print("deinit")
}
}