Sobes.tech
Middle

Wordt er direct na het maken van de controller een instantie van de view gemaakt?

sobes.tech AI

Antwoord van AI

Nee. Het exemplaar van de view voor een UIViewController-controller wordt lui gemaakt, bij de eerste keer dat er wordt verwezen naar de eigenschap view.

UIKit maakt de view niet meteen na het initialiseren van de controller om bronnen te optimaliseren. De view kan visueel complex zijn en veel geheugen en CPU-tijd vereisen om te maken. Door het 'lui' te maken, alleen wanneer het echt nodig is voor weergave op het scherm, bespaart het systeem bronnen.

Dit proces gebeurt bijvoorbeeld wanneer de controller wordt toegevoegd aan de hiërarchie van views van een andere controller of venster, of wanneer de eigenschap view expliciet wordt opgeroepen. Als de controller is geïnitialiseerd, maar nooit wordt weergegeven of gebruikt, wordt de view niet gemaakt.

De levenscyclus van de controller en het maken van de view omvatten de volgende kernpunten:

  1. init(coder:) of init(nibName:bundle:): De controller wordt geïnitialiseerd, maar view is nog nil.
  2. Eerste keer dat op view wordt aangewezen: Als view nil is, roept het systeem de methode loadView() op.
  3. loadView(): In deze methode maakt u (of het systeem standaard) de hoofdview van de controller en wijst u deze toe aan de eigenschap view.
  4. viewDidLoad(): Deze methode wordt nadat de view is geladen en toegewezen aan view opgeroepen. Hier wordt meestal de configuratie van subviews gedaan, gegevens geladen en andere acties die afhankelijk zijn van de aanwezigheid van de view.

Voorbeeld van het overschrijven van loadView():

override func loadView() {
    // In plaats van laden uit Storyboard/XIB of het maken van een lege UIView
    // maken we onze aangepaste view
    let customView = CustomContentView()
    view = customView
    // Hier is view niet meer `nil`
}

Het is belangrijk om te onthouden dat je in de meeste gevallen loadView() niet rechtstreeks overschrijft, maar vertrouwt op de standaardimplementatie van UIKit, die de view laadt uit een Storyboard, XIB-bestand of standaard een lege UIView maakt. Het begrijpen wanneer en hoe de view wordt gemaakt, is echter cruciaal.