Sobes.tech
Middle

Povedz mi o životnom cykle Vue kontrolera.

sobes.tech AI

Odpoveď od AI

Životný cyklus kontroléra typu UIViewController v iOS predstavuje sled udalostí, ktoré nastávajú od jeho vytvorenia až po zničenie. Hlavné fázy:

  1. Inicializácia:
    • init?(coder aDecoder: NSCoder): Inicializácia z Storyboard/Nib.
    • init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?): Inicializácia z Nib súboru alebo programovo bez Nib.
    • loadView(): Načítanie alebo vytvorenie koreňového zobrazenia kontroléra. Ak sa používa Storyboard/Nib, volá sa automaticky. Pri programovom vytvorení je potrebné prepísať.
  2. Načítanie zobrazenia:
    • viewDidLoad(): Volá sa po načítaní zobrazenia kontroléra do pamäti. Vhodné pre počiatočné nastavenia, ktoré nevyžadujú prístup k geometrickým vlastnostiam.
  3. Zobrazenie:
    • viewWillAppear(_ animated: Bool): Presne predtým, než sa zobrazenie kontroléra stane viditeľným. Vhodné na aktualizáciu dát.
    • viewDidAppear(_ animated: Bool): Po tom, čo sa zobrazenie stane viditeľným. Vhodné na spustenie animácií alebo iných úloh, ktoré majú byť vykonané až po úplnom zobrazení.
  4. Zmiznutie zobrazenia:
    • viewWillDisappear(_ animated: Bool): Presne predtým, než sa zobrazenie kontroléra stane neviditeľným. Vhodné na uloženie stavu alebo ukončenie aktivít.
    • viewDidDisappear(_ animated: Bool): Po tom, čo sa zobrazenie stane neviditeľným. Vhodné na uvoľnenie zdrojov alebo zastavenie procesov, ktoré nie sú potrebné na pozadí.
  5. Zmeny rozloženia:
    • viewWillLayoutSubviews(): Predtým, než sa zmenia veľkosti zobrazení kontroléra.
    • viewDidLayoutSubviews(): Po zmene veľkostí zobrazení. Vhodné na finálne nastavenie veľkostí a pozícií prvkov.
  6. Zmeny v Trait Collection:
    • traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?): Pri zmene vlastností prostredia, ako je veľkosť triedy, hustota obrazovky, svetlý/tmavý režim a pod.
  7. Uvoľnenie pamäti:
    • deinit: Presne pred uvoľnením objektu kontroléra z pamäti. Používa sa na čistenie zdrojov, odhlásenie z oznámení a pod.

Dôležité body:

  • Metódy loadView, viewDidLoad, viewDidAppear, viewWillDisappear, viewDidDisappear, deinit sa volajú raz za životný cyklus objektu kontroléra.
  • Metódy viewWillAppear a viewDidAppear môžu byť volané viackrát, napríklad pri navigácii dopredu a dozadu.

Príklad sekvencie volaní:

// Inicializácia (ak z Storyboard/Nib)
init?(coder aDecoder: NSCoder)

// Alebo inicializácia (ak programovo)
init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?)

// Načítanie zobrazenia
loadView()
viewDidLoad()

// Zobrazenie
viewWillAppear(true)
// ... zobrazenie je teraz viditeľné ...
viewDidAppear(true)

// Zmiznutie zobrazenia (napríklad pri prechode na iný VC)
viewWillDisappear(true)
// ... zobrazenie je teraz neviditeľné ...
viewDidDisappear(true)

// Uvoľnenie pamäti (keď na kontrolér nie sú žiadne silné odkazy)
deinit