Middle
Papaskink apie valdiklio gyvavimo ciklus ir kaip jie kviečiami.
sobes.tech AI
Atsakymas iš AI
UIViewController gyvenimo ciklas apima metodus, kurie kviečiami tam tikrais jo egzistavimo momentais: nuo sukūrimo iki sunaikinimo.
Pagrindiniai gyvenimo ciklo metodai:
-
viewDidLoad():- Kviečiamas po to, kai kontrolerio vaizdas įkeltas į atmintį, bet dar nėra rodomas ekrane.
- Naudojamas duomenų inicializacijai, UI elementų konfigūravimui, kurie nepriklauso nuo geometrinės vaizdo dalies.
- Kviečiamas tik vieną kartą per visą kontrolerio gyvavimo laiką.
-
viewWillAppear(_ animated: Bool):- Tiesiogiai kviečiamas prieš tai, kai vaizdas pasirodys ekrane.
- Naudojamas užduočių vykdymui, kurios turi būti atliekamos kiekvieną kartą, kai vaizdas tampa matomas (pvz., duomenų atnaujinimas, animacijos).
- Gali būti kviečiamas kelis kartus.
-
viewDidAppear(_ animated: Bool):- Kviečiamas po to, kai vaizdas visiškai pasirodė ekrane ir tapo matomas vartotojui.
- Tinka animacijų paleidimui ar kitų užduočių vykdymui, kurioms reikia, kad vaizdas būtų visiškai paruoštas.
- Gali būti kviečiamas kelis kartus.
-
viewWillDisappear(_ animated: Bool):- Tiesiogiai kviečiamas prieš tai, kai vaizdas bus pašalintas iš ekrano (pvz., pereinant į kitą ekraną).
- Naudojamas būsenos išsaugojimui ar užduočių sustabdymui, kurios neturėtų būti vykdomos, kol vaizdas nėra matomas (pvz., laikmačių sustabdymas).
- Gali būti kviečiamas kelis kartus.
-
viewDidDisappear(_ animated: Bool):- Kviečiamas po to, kai vaizdas visiškai pašalintas iš ekrano.
- Naudojamas išteklių išlaisvinimui ar užduočių sustabdymui, kurios nėra reikalingos, kai vaizdas nėra matomas.
- Gali būti kviečiamas kelis kartus.
-
viewWillLayoutSubviews():- Kviečiamas prieš pradedant išdėstyti subview'us.
- Naudojamas pakeitimams įvesti į apribojimus ar rėmus prieš automatinį išdėstymą.
- Gali būti kviečiamas kelis kartus.
-
viewDidLayoutSubviews():- Kviečiamas po to, kai kontroleris baigia išdėstyti subview'us.
- Naudojamas užduočių vykdymui, priklausomų nuo galutinių matmenų (pvz., slankiklio indikatorių ar šešėlių nustatymui).
- Gali būti kviečiamas kelis kartus.
-
didReceiveMemoryWarning():- Kviečiamas žemo operatyviosios atminties lygio metu.
- Naudojamas išteklių išlaisvinimui, kurie gali būti vėl sukuriami vėliau.
-
deinit:- Kviečiamas tiesiogiai prieš
UIViewControllerobjekto sunaikinimą ir išlaisvinimą iš atminties. - Naudojamas galutiniam valymui, pvz., stebėtojų pašalinimui ar tinklo ryšių uždarymui.
- Kviečiamas tiesiogiai prieš
Kvietimo tvarka:
Tipinė metodų kvietimo tvarka, kai kontroleris pasirodo:
viewDidLoad()viewWillAppear(_ animated: Bool)viewWillLayoutSubviews()viewDidLayoutSubviews()viewDidAppear(_ animated: Bool)
Tipinė metodų kvietimo tvarka, kai kontroleris išnyksta:
viewWillDisappear(_ animated: Bool)viewDidDisappear(_ animated: Bool)deinit(jei kontroleris daugiau nereikalingas)
Pavyzdinė įgyvendinimo schema:
import UIKit
class MyViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// UI nustatymai, duomenų inicializacija
print("viewDidLoad")
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// UI atnaujinimas prieš pasirodymą
print("viewWillAppear")
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
// Pasibaigus pasirodymui, animacijų paleidimas
print("viewDidAppear")
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
// Paruošimas išnykimui, būsenos išsaugojimas
print("viewWillDisappear")
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
// Išnykimas baigtas, išteklių valymas
print("viewDidDisappear")
}
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
// Prieš automatinį išdėstymą
print("viewWillLayoutSubviews")
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
// Po automatinio išdėstymo
print("viewDidLayoutSubviews")
}
deinit {
// Išteklių valymas
print("deinit")
}
}