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:
- 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.
- Vaizdo įkėlimas:
viewDidLoad(): Kviečiamas po to, kai vaizdas įkeltas į atmintį. Tinka inicializacijos nustatymams, kurie nereikalauja prieigos prie geometries.
- 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.
- 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.
- 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.
- 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.
- 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,deinitkviečiami vieną kartą per objekto gyvavimo ciklą.viewWillAppearirviewDidAppeargali 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