Middle
Räägi mulle Vue kontrolleri elutsüklist.
sobes.tech AI
Vastus AI-lt
iOS-süsteemis UIViewController tüüpi kontrolleri elutsükkel on sündmuste jada, mis toimub selle loomise ja hävitamise vahel. Peamised etapid:
- Initsialiseerimine:
init?(coder aDecoder: NSCoder): Initsialiseerimine Storyboard/Nib-ist.init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?): Initsialiseerimine Nib-failist või programmeerides ilma Nib-ita.loadView(): Kontrolleri põhivaate laadimine või loomine. Kui kasutatakse Storyboard/Nib, kutsutakse see automaatselt. Programmeerimisel tuleb üle kirjutada.
- Vaate laadimine:
viewDidLoad(): Kutsutakse pärast vaate laadimist mällu. Sobib initsialiseerimisseadistuste jaoks, mis ei vaja geomeetriale juurdepääsu.
- Vaate ilmumine:
viewWillAppear(_ animated: Bool): Kutsutakse otse enne, kui vaade muutub nähtavaks. Sobib andmete uuendamiseks, mis võivad muutuda vaadete vahel.viewDidAppear(_ animated: Bool): Kutsutakse pärast vaate ilmumist. Sobib animatsioonide või muude ülesannete alustamiseks, mis peaksid toimuma ainult pärast täielikku kuvamist.
- Vaate kadumine:
viewWillDisappear(_ animated: Bool): Kutsutakse otse enne, kui vaade muutub nähtamatuks. Sobib oleku salvestamiseks või tegevuste lõpetamiseks.viewDidDisappear(_ animated: Bool): Kutsutakse pärast vaate kadumist. Sobib ressursside vabastamiseks või protsesside peatamiseks, mis pole taustal vajalikud.
- Paigutuse muutused:
viewWillLayoutSubviews(): Kutsutakse enne, kui vaadete suurused muutuvad.viewDidLayoutSubviews(): Kutsutakse pärast, kui vaadete suurused on muutunud. Sobib elementide lõplikuks seadistamiseks suuruste ja positsioonide osas.
- Traiti kollektsiooni muutused:
traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?): Kutsutakse keskkonna omaduste muutmisel, nagu suuruse klass, ekraani tihedus, hele/tume režiim jne.
- Mälu vabastamine:
deinit: Kutsutakse enne objekti mälust vabastamist. Kasutatakse ressursside puhastamiseks, teavituste tühistamiseks jne.
Olulised punktid:
loadView,viewDidLoad,viewDidAppear,viewWillDisappear,viewDidDisappear,deinitkutsutakse üks kord objekti elutsükli jooksul.viewWillAppearjaviewDidAppearvõivad kutsuda mitu korda, näiteks navigeerimisel edasi-tagasi.
Näide kutsumisjärjestusest, kui kontroller luuakse ja kuvatakse:
// Initsialiseerimine (kui Storyboard/Nib-st)
init?(coder aDecoder: NSCoder)
// Või initsialiseerimine (kui programmeerides)
init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?)
// Vaate laadimine
loadView()
viewDidLoad()
// Vaate ilmumine
viewWillAppear(true)
// ... vaade muutus nähtavaks ...
viewDidAppear(true)
// Vaate kadumine (näiteks teise VC-le üleminek)
viewWillDisappear(true)
// ... vaade muutus nähtamatuks ...
viewDidDisappear(true)
// Mälu vabastamine (kui kontrollerile ei ole enam tugevaid viiteid)
deinit