Sobes.tech
Middle

Mesélj a Vue vezérlő életciklusáról.

sobes.tech MI

Válasz az MI-től

Az iOS-ben a UIViewController típusú vezérlő életciklusa egy eseménysorozatot jelent, amely a létrehozásától a megsemmisítéséig tart. A főbb szakaszok:

  1. Inicializálás:
    • init?(coder aDecoder: NSCoder): Storyboard/Nib-ből történő inicializálás.
    • init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?): Nib fájlből vagy programozottan inicializálás Nib nélkül.
    • loadView(): A vezérlő gyökérnézetének betöltése vagy létrehozása. Ha Storyboard/Nib-et használunk, automatikusan hívódik. Programozott nézet esetén felül kell írni.
  2. Nézet betöltése:
    • viewDidLoad(): A vezérlő nézetének memóriába töltése után hívódik meg. Olyan inicializáló beállításokra alkalmas, amelyek nem igényelnek geometriai hozzáférést.
  3. Nézet megjelenése:
    • viewWillAppear(_ animated: Bool): Pontosan akkor hívódik meg, mielőtt a nézet láthatóvá válik. Az adatok frissítésére alkalmas.
    • viewDidAppear(_ animated: Bool): A nézet láthatóvá válása után hívódik meg. Animációk indítására vagy más feladatokra, amelyek csak a teljes megjelenítés után futnak.
  4. Nézet eltűnése:
    • viewWillDisappear(_ animated: Bool): Pontosan akkor hívódik meg, mielőtt a nézet láthatatlanná válik. Állapot mentésére vagy aktivitások leállítására alkalmas.
    • viewDidDisappear(_ animated: Bool): A nézet láthatatlanná válása után hívódik meg. Erőforrások felszabadítására vagy háttérfolyamatok leállítására alkalmas.
  5. Elrendezés változásai:
    • viewWillLayoutSubviews(): A vezérlő nézeteinek méretei változás előtt hívódik meg.
    • viewDidLayoutSubviews(): A nézetek méretei változás után hívódik meg. Az elemek végső méret- és pozícióbeállítására alkalmas.
  6. Trait Collection változásai:
    • traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?): Környezet jellemzőinek változásakor hívódik meg.
  7. Memória felszabadítása:
    • deinit: Pontosan akkor hívódik meg, mielőtt az objektum a memóriából felszabadulna. Erőforrások tisztítására, értesítésekről való leiratkozásra stb.

Fontos pontok:

  • A loadView, viewDidLoad, viewDidAppear, viewWillDisappear, viewDidDisappear, deinit metódusok egyszer hívódnak az objektum életciklusa során.
  • A viewWillAppear és viewDidAppear metódusok többször is meghívódhatnak, például navigáció során előre és hátra.

Példa hívási sorrendre:

// Inicializálás (ha Storyboard/Nib-ből)
init?(coder aDecoder: NSCoder)

// Vagy inicializálás (ha programozott)
init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?)

// Nézet betöltése
loadView()
viewDidLoad()

// Nézet megjelenítése
viewWillAppear(true)
// ... a nézet láthatóvá vált ...
viewDidAppear(true)

// Nézet eltűnése (pl. másik VC-re váltáskor)
viewWillDisappear(true)
// ... a nézet láthatatlanná vált ...
viewDidDisappear(true)

// Memória felszabadítása (amikor már nincs erős hivatkozás a vezérlőre)
deinit