Middle
Räägi kontrolleri elutsüklitest ja kuidas neid kutsutakse.
sobes.tech AI
Vastus AI-lt
UIViewController elutsükkel hõlmab meetodeid, mis kutsutakse kindlatel hetkedel selle olemasolu jooksul: loomisest kuni hävitamiseni.
Peamised elutsükli meetodid:
-
viewDidLoad():- Kutsutakse pärast kontrolleri vaate laadimist mällu, kuid enne selle kuvamist ekraanil.
- Kasutatakse andmete algseks seadistamiseks, UI elementide konfigureerimiseks, mis ei sõltu geomeetriast.
- Kutsutakse ainult üks kord kogu elutsükli jooksul.
-
viewWillAppear(_ animated: Bool):- Kutsutakse otse enne vaate ilmumist ekraanile.
- Kasutatakse ülesannete täitmiseks, mis peavad toimuma iga kord, kui vaade muutub nähtavaks (nt andmete uuendamine, animatsioonid).
- Võib kutsuda mitu korda.
-
viewDidAppear(_ animated: Bool):- Kutsutakse pärast seda, kui vaade on täielikult ekraanil nähtav ja kasutajale kättesaadav.
- Sobib animatsioonide või muude ülesannete alustamiseks, mis nõuavad, et vaade oleks täielikult valmis.
- Võib kutsuda mitu korda.
-
viewWillDisappear(_ animated: Bool):- Kutsutakse otse enne vaate eemaldamist ekraanilt (nt teisele ekraanile üleminek).
- Kasutatakse oleku salvestamiseks või ülesannete peatamiseks, mis ei tohiks toimuda, kuni vaade on nähtamatu (nt taimerite peatamine).
- Võib kutsuda mitu korda.
-
viewDidDisappear(_ animated: Bool):- Kutsutakse pärast seda, kui vaade on täielikult ekraanilt eemaldatud.
- Kasutatakse ressursside vabastamiseks või ülesannete peatamiseks, mis pole enam vajalikud, kui vaade pole nähtav.
- Võib kutsuda mitu korda.
-
viewWillLayoutSubviews():- Kutsutakse enne alamvaadete paigutamise alustamist.
- Kasutatakse muudatuste tegemiseks piirangutes või raamides enne automaatset paigutust.
- Võib kutsuda mitu korda.
-
viewDidLayoutSubviews():- Kutsutakse pärast seda, kui kontroller on lõpetanud alamvaadete paigutamise.
- Kasutatakse ülesannete täitmiseks, mis sõltuvad lõplikest mõõtmetest (nt kerimisindikaatorite või varjude seadistamine).
- Võib kutsuda mitu korda.
-
didReceiveMemoryWarning():- Kutsutakse madala mälu tasemel.
- Kasutatakse ressursside vabastamiseks, mis võivad hiljem uuesti luua.
-
deinit:- Kutsutakse otse enne
UIViewControllerobjekti hävitamist ja mälust vabastamist. - Kasutatakse lõplikuks puhastuseks, näiteks jälgijate eemaldamiseks või võrguliikluse sulgemiseks.
- Kutsutakse otse enne
Kutsumise järjekord:
Tüüpiline meetodite kutsumise järjekord, kui kontroller ilmub:
viewDidLoad()viewWillAppear(_ animated: Bool)viewWillLayoutSubviews()viewDidLayoutSubviews()viewDidAppear(_ animated: Bool)
Tüüpiline meetodite kutsumise järjekord, kui kontroller kaob:
viewWillDisappear(_ animated: Bool)viewDidDisappear(_ animated: Bool)deinit(kui kontroller enam ei ole vajalik)
Näidissüsteemi näide:
import UIKit
class MyViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// UI seadistamine, andmete algne laadimine
print("viewDidLoad")
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// UI uuendamine enne ilmumist
print("viewWillAppear")
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
// Pärast ilmumist, animatsioonide käivitamine
print("viewDidAppear")
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
// Valmistumine kadumiseks, oleku salvestamine
print("viewWillDisappear")
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
// Kadumine lõppes, ressursside puhastamine
print("viewDidDisappear")
}
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
// Enne automaatset paigutust
print("viewWillLayoutSubviews")
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
// Pärast automaatset paigutust
print("viewDidLayoutSubviews")
}
deinit {
// Ressursside puhastamine
print("deinit")
}
}