Middle
Pastāsti par kontroliera dzīves cikliem un kā tie tiek izsaukti.
sobes.tech AI
Atbilde no AI
UIViewController dzīves cikls ietver metodes, kas tiek izsauktas noteiktos tās pastāvēšanas laikā: no izveides līdz iznīcināšanai.
Galvenās dzīves cikla metodes:
-
viewDidLoad():- Izsauc pēc tam, kad kontroliera skats tiek ielādēts atmiņā, bet vēl nav parādīts ekrānā.
- Izmanto datu inicializācijai, UI elementu konfigurēšanai, kas nav atkarīgi no ģeometrijas.
- Izsauc tikai vienu reizi visa dzīves laikā.
-
viewWillAppear(_ animated: Bool):- Tieši pirms skats parādīsies ekrānā.
- Izmanto uzdevumu veikšanai, kas jāveic katru reizi, kad skats kļūst redzams (piemēram, datu atjaunināšana, animācijas).
- Var tikt izsaukta vairākas reizes.
-
viewDidAppear(_ animated: Bool):- Pēc tam, kad skats pilnībā parādījās un kļuva redzams lietotājam.
- Derīgs animāciju vai citu uzdevumu uzsākšanai, kas prasa, lai skats būtu pilnībā gatavs.
- Var tikt izsaukta vairākas reizes.
-
viewWillDisappear(_ animated: Bool):- Tieši pirms skats tiks noņemts no ekrāna (piemēram, pārejot uz citu ekrānu).
- Izmanto stāvokļa saglabāšanai vai uzdevumu apturēšanai, kas nedrīkst tikt veikti, kamēr skats nav redzams (piemēram, taimeru apturēšana).
- Var tikt izsaukta vairākas reizes.
-
viewDidDisappear(_ animated: Bool):- Pēc tam, kad skats pilnībā tika noņemts no ekrāna.
- Izmanto resursu atbrīvošanai vai uzdevumu apturēšanai, kas nav nepieciešami, kad skats nav redzams.
- Var tikt izsaukta vairākas reizes.
-
viewWillLayoutSubviews():- Pirms subskatu izvietošanas sākuma.
- Izmanto izmaiņu veikšanai ierobežojumos vai rāmos pirms automātiskās izkārtošanas.
- Var tikt izsaukta vairākas reizes.
-
viewDidLayoutSubviews():- Pēc tam, kad kontrolieris pabeidz subskatu izvietošanu.
- Izmanto uzdevumu veikšanai, kas ir atkarīgi no galīgajiem izmēriem (piemēram, ritināšanas indikatoru vai ēnu iestatīšanai).
- Var tikt izsaukta vairākas reizes.
-
didReceiveMemoryWarning():- Izsaucas zemas operatīvās atmiņas līmenī.
- Izmanto resursu atbrīvošanai, kas vēlāk var tikt atkārtoti izveidoti.
-
deinit:- Tieši pirms
UIViewControllerobjekta iznīcināšanas un atbrīvošanas no atmiņas. - Izmanto galīgai tīrīšanai, piemēram, novērotāju noņemšanai vai tīkla savienojumu slēgšanai.
- Tieši pirms
Izsaukšanas secība:
Tipiska metožu izsaukšanas secība, kad kontrolieris parādās:
viewDidLoad()viewWillAppear(_ animated: Bool)viewWillLayoutSubviews()viewDidLayoutSubviews()viewDidAppear(_ animated: Bool)
Tipiska metožu izsaukšanas secība, kad kontrolieris pazūd:
viewWillDisappear(_ animated: Bool)viewDidDisappear(_ animated: Bool)deinit(ja kontrolieris vairs nav nepieciešams)
Piemērs realizācijai:
import UIKit
class MyViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// UI konfigurācija, datu inicializācija
print("viewDidLoad")
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// UI atjaunināšana pirms parādīšanās
print("viewWillAppear")
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
// Pēc parādīšanās, animāciju uzsākšana
print("viewDidAppear")
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
// Sagatavošanās izzušanai, stāvokļa saglabāšana
print("viewWillDisappear")
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
// Izzušanas pabeigšana, resursu tīrīšana
print("viewDidDisappear")
}
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
// Pirms automātiskās izkārtošanas
print("viewWillLayoutSubviews")
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
// Pēc automātiskās izkārtošanas
print("viewDidLayoutSubviews")
}
deinit {
// Resursu tīrīšana
print("deinit")
}
}