Sobes.tech
Middle

Papaskinkite man apie Vue kontrolerio gyvavimo ciklą.

sobes.tech AI

Atsakymas iš AI

iOS'e UIViewController tipo kontrolerio ciklas sudaro įvykių seką, vykstančią nuo jo sukūrimo iki sunaikinimo. Pagrindiniai etapai:

  1. Inicijavimas:
    • init?(coder aDecoder: NSCoder): Inicijavimas iš Storyboard/Nib.
    • init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?): Inicijavimas iš Nib failo arba programinis be Nib.
    • loadView(): Kūrimas arba įkėlimas pagrindinio valdiklio vaizdo. Jei naudojamas Storyboard/Nib, jis automatiškai kviečiamas. Programiškai sukurtam vaizdui reikia perrašyti.
  2. Vaizdo įkėlimas:
    • viewDidLoad(): Kviečiamas po to, kai vaizdas įkeltas į atmintį. Tinka inicializacijos nustatymams, kurie nereikalauja prieigos prie geometries.
  3. Vaizdo rodymas:
    • viewWillAppear(_ animated: Bool): Kviečiamas prieš tai, kai vaizdas tampa matomas. Tinka duomenų atnaujinimui, kurie gali pasikeisti tarp rodymų.
    • viewDidAppear(_ animated: Bool): Kviečiamas po to, kai vaizdas tapo matomas. Tinka animacijų paleidimui ar kitoms užduotims, kurios turi būti vykdomos tik po pilno rodymo.
  4. Vaizdo paslėpimas:
    • viewWillDisappear(_ animated: Bool): Kviečiamas prieš tai, kai vaizdas tampa nematomas. Tinka būsenos išsaugojimui ar veiklų nutraukimui.
    • viewDidDisappear(_ animated: Bool): Kviečiamas po to, kai vaizdas tapo nematomas. Tinka išteklių atlaisvinimui ar procesų sustabdymui, kurie nereikalingi fone.
  5. Maketo pakeitimai:
    • viewWillLayoutSubviews(): Kviečiamas prieš tai, kai valdiklio vaizdai keis savo dydį.
    • viewDidLayoutSubviews(): Kviečiamas po to, kai valdiklio vaizdai pakeitė savo dydį. Tinka galutiniam dydžių ir pozicijų nustatymui.
  6. Traito kolekcijos pakeitimai:
    • traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?): Kviečiamas keičiant aplinkos charakteristikas, tokias kaip dydžio klasė, ekrano tankis, šviesus/tamsus režimas ir kt.
  7. Atlaisvinimas iš atminties:
    • deinit: Kviečiamas prieš išlaisvinant kontrolerio objektą iš atminties. Naudojamas išteklių valymui, pranešimų atšaukimui ir kt.

Svarbūs momentai:

  • loadView, viewDidLoad, viewDidAppear, viewWillDisappear, viewDidDisappear, deinit kviečiami vieną kartą per objekto gyvavimo ciklą.
  • viewWillAppear ir viewDidAppear gali būti kviečiami kelis kartus, pvz., navigacijos metu.

Pavyzdys sekos, kai kuriamas ir rodomas kontroleris:

// Inicijavimas (jei iš Storyboard/Nib)
init?(coder aDecoder: NSCoder)

// Arba inicijavimas (jei programinis)
init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?)

// Vaizdo įkėlimas
loadView()
viewDidLoad()

// Vaizdo rodymas
viewWillAppear(true)
// ... vaizdas tapo matomas ...
viewDidAppear(true)

// Vaizdo paslėpimas (pvz., pereinant į kitą VC)
viewWillDisappear(true)
// ... vaizdas tapo nematomas ...
viewDidDisappear(true)

// Atlaisvinimas iš atminties (kai nėra stiprių nuorodų į kontrolerį)
deinit