Sobes.tech
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:

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. viewWillLayoutSubviews():

    • Kutsutakse enne alamvaadete paigutamise alustamist.
    • Kasutatakse muudatuste tegemiseks piirangutes või raamides enne automaatset paigutust.
    • Võib kutsuda mitu korda.
  7. 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.
  8. didReceiveMemoryWarning():

    • Kutsutakse madala mälu tasemel.
    • Kasutatakse ressursside vabastamiseks, mis võivad hiljem uuesti luua.
  9. deinit:

    • Kutsutakse otse enne UIViewController objekti hävitamist ja mälust vabastamist.
    • Kasutatakse lõplikuks puhastuseks, näiteks jälgijate eemaldamiseks või võrguliikluse sulgemiseks.

Kutsumise järjekord:

Tüüpiline meetodite kutsumise järjekord, kui kontroller ilmub:

  1. viewDidLoad()
  2. viewWillAppear(_ animated: Bool)
  3. viewWillLayoutSubviews()
  4. viewDidLayoutSubviews()
  5. viewDidAppear(_ animated: Bool)

Tüüpiline meetodite kutsumise järjekord, kui kontroller kaob:

  1. viewWillDisappear(_ animated: Bool)
  2. viewDidDisappear(_ animated: Bool)
  3. 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")
    }
}