Sobes.tech
Middle

Da li se instanca prikaza kreira odmah nakon kreiranja kontrolera?

sobes.tech АИ

Одговор од АИ

Ne. Primerak prikaza (view) za kontroler tipa UIViewController se kreira lenjo, pri prvom pristupu svojstvu view.

UIKit ne kreira prikaz odmah nakon inicijalizacije kontrolera radi optimizacije resursa. Prikaz može biti vizuelno složen i zahtevati mnogo memorije i CPU vremena za kreiranje. Kreiranjem ga "lenjo", samo kada je zaista potrebno za prikaz na ekranu, sistem štedi resurse.

Ovaj proces se dešava, na primer, kada je kontroler dodat u hijerarhiju prikaza drugog kontrolera ili prozora, ili kada se eksplicitno pozove njegovo svojstvo view. Ako je kontroler inicijalizovan, ali nikada ne bude prikazan ili korišćen, njegov prikaz neće biti kreiran.

Ciklus života kontrolera i kreiranje prikaza uključuju sledeće ključne tačke:

  1. init(coder:) ili init(nibName:bundle:): Kontroler je inicijalizovan, ali view je još uvek nil.
  2. Prvi put kada se pristupi view: Ako je view nil, sistem poziva metodu loadView().
  3. loadView(): U ovoj metodi vi (ili sistem po default-u) kreirate korenski prikaz kontrolera i dodeljujete ga svojstvu view.
  4. viewDidLoad(): Ovaj metod se poziva nakon što je prikaz učitan i dodeljen svojstvu view. Ovde se obično vrši konfiguracija podprikaza, učitavanje podataka i druge radnje koje zavise od prisustva prikaza.

Primer prepisivanja loadView():

override func loadView() {
    // Umesto učitavanja iz Storyboard/XIB ili pravljenja praznog UIView
    // pravimo naš prilagođeni prikaz
    let customView = CustomContentView()
    view = customView
    // Ovde view više nije `nil`
}

Važno je zapamtiti da u većini slučajeva nećete direktno prepisivati loadView(), već ćete se osloniti na standardnu implementaciju UIKit-a, koja učitava prikaz iz Storyboard-a, XIB fajla ili kreira prazan UIView po default-u. Međutim, razumevanje kada i kako se kreira prikaz je ključno.