viewDidLoad in iOS: wat is het, doel en codevoorbeelden

Auteur: IT Sectr Gepubliceerd: 2026-03-05 Leestijd: 8 min

viewDidLoad — is de eerste methode die UIKit aanroept nadat de View van UIViewController in het geheugen is geladen. Volgens Apple Developer Documentation wordt deze methode precies één keer aangeroepen gedurende de hele levensduur van de controller. viewDidLoad is de belangrijkste plaats voor de initiële configuratie van de interface, registratie van cellen en initialisatie van gegevens.

Belangrijkste punten

  • viewDidLoad wordt één keer aangeroepen nadat View in het geheugen is geladen
  • super.viewDidLoad is verplicht — zonder breekt de Lifecycle
  • In deze methode wordt UI geconfigureerd, worden cellen geregistreerd en data source gemaakt
  • Wordt niet opnieuw aangeroepen bij terugkeer naar het scherm — gebruik viewWillAppear
  • Geschikt voor eenmalige bewerkingen en abonnementen op permanente meldingen

Wat is viewDidLoad

viewDidLoad — is een instantiemethode van UIViewController die UIKit onmiddellijk aanroept nadat de View van de controller in het RAM is geladen. Op dit moment zijn alle IBOutlet-eigenschappen al verbonden met de interface-elementen, maar de View is nog niet toegevoegd aan de vensterhiërarchie en is niet zichtbaar voor de gebruiker. De ontwikkelaar overschrijft deze methode om de initiële configuratie van het scherm uit te voeren.

De methode maakt deel uit van de ViewController Lifecycle en komt direct na loadView, als de View programmatisch wordt gemaakt, of na het laden uit Storyboard. In een typisch project is viewDidLoad de meest overschreven methode van UIViewController, omdat het een veilig punt biedt om te werken met subviews die al bestaan en klaar zijn voor configuratie.

Een belangrijk detail: op het moment van aanroep van viewDidLoad komen de afmetingen van de View nog niet overeen met de uiteindelijke — Auto Layout heeft de passen niet voltooid en het frame kan afwijken van wat verwacht wordt. Voor berekeningen die afhankelijk zijn van afmetingen gebruik je viewDidLayoutSubviews.

Wanneer wordt viewDidLoad aangeroepen

De timing van de aanroep van viewDidLoad hangt af van hoe de controller wordt geïnitialiseerd. In de meeste gevallen roept UIKit deze methode automatisch aan bij de eerste toegang tot de view-eigenschap van de controller — dit wordt het lazy-loading mechanisme van UIViewController genoemd.

Bij de eerste opening van het scherm

Wanneer NavigationController of TabBarController uw scherm voor de eerste keer weergeeft, controleert UIKit of de View is geladen. Zo niet — dan wordt loadView (of laden uit Storyboard) aangeroepen, waarna onmiddellijk viewDidLoad wordt geactiveerd. Dit is het standaard scenario en gebeurt één keer voor elke instantie van de controller.

swift
override func viewDidLoad() {
    super.viewDidLoad()
    print("View geladen — interface kan worden geconfigureerd")
    setupUI()
    configureTableView()
}

Bij terugkeer naar een bestaand scherm

viewDidLoad wordt niet opnieuw aangeroepen bij terugkeer naar het scherm via de back button of dismiss. Als uw logica afhangt van het feit dat het scherm opnieuw verschijnt — plaats deze dan in viewWillAppear. Dit is een van de meest voorkomende conceptuele fouten: ontwikkelaars verwachten dat viewDidLoad bij elke weergave wordt geactiveerd, maar UIKit roept het slechts één keer aan.

Bij forcedViewLoad

Soms dwingen ontwikkelaars de view van de controller af om het laden vooraf te starten: let _ = controller.view. Dit forceert de aanroep van loadView en viewDidLoad voordat de controller op het scherm verschijnt. Deze truc wordt gebruikt wanneer de View vooraf moet worden voorbereid voor een soepele overgang.

Wat doe je in viewDidLoad

viewDidLoad is bedoeld voor eenmalige configuratiebewerkingen die niet afhankelijk zijn van of het scherm zichtbaar is. Correct gebruik van deze methode is de sleutel tot een schone architectuur en voorspelbaar gedrag van de controller.

Configuratie van UI-componenten

In viewDidLoad worden nib-bestanden en klassen geregistreerd voor UITableView en UICollectionView, worden gedelegeerden geconfigureerd en worden initiële waarden van UI-elementeigenschappen ingesteld. Omdat alle IBOutlet op dit moment al zijn verbonden, kan veilig worden verwezen naar label.text, imageView.image en andere eigenschappen van subviews.

swift
override func viewDidLoad() {
    super.viewDidLoad()
    tableView.dataSource = self
    tableView.delegate = self
    tableView.register(
        CustomCell.self,
        forCellReuseIdentifier: CustomCell.identifier
    )
    title = "Hoofdscherm"
}

Initialisatie van gegevens en abonnementen

Hier wordt viewModel gemaakt, data source met arrays geïnitialiseerd, en worden meldingen geabonneerd die gedurende de hele levensduur van de controller moeten werken. Bijvoorbeeld een abonnement op UIApplication.willEnterForegroundNotification voor het bijwerken van gegevens bij terugkeer uit de achtergrond — een geschikte kandidaat voor viewDidLoad. ViewModel in moderne iOS-architectuur fungeert als verbindende schakel tussen de controller en de bedrijfslogica, en de initialisatie ervan precies in viewDidLoad zorgt voor de gereedheid van gegevens op het moment van de eerste weergave van het scherm.

Besteed speciale aandacht aan de configuratie van data source voor tabellen en verzamelingen. Als uw tabel gebruikmaakt van UIFetchedResultsController of NSFetchedResultsController met Core Data, initialiseer dan fetch request en gedelegeerde in viewDidLoad. Dit garandeert dat de tabel bij de eerste weergave van het scherm al gevuld is met gegevens zonder extra query's.

Configuratie van navigatie

In viewDidLoad worden NavigationBar-knoppen geconfigureerd, large title ingesteld, search controller toegevoegd en edit/done-knoppen ingesteld. Deze elementen veranderen zelden bij herhaalde weergaven van het scherm, dus hun initialisatie hier is optimaal.

Wat je niet moet doen in viewDidLoad

Niet alle bewerkingen zijn geschikt in viewDidLoad. Sommige acties die in deze methode worden geplaatst, leiden tot overmatig geheugengebruik, onjuist gedrag of fouten bij herhaalde weergave van het scherm.

Vermijd het starten van netwerkverzoeken waarvan het resultaat alleen de UI beïnvloedt. Als het verzoek wordt voltooid voordat het scherm verschijnt, ziet de gebruiker het resultaat niet, en als het erna wordt voltooid — kunnen de gegevens verouderd zijn. Start het laden in viewDidLoad, maar werk de UI bij in viewWillAppear.

Voer geen bewerkingen uit in viewDidLoad die afhankelijk zijn van de afmetingen en positie van de View. Op het moment van aanroep heeft Auto Layout de passen niet voltooid en het frame kan niet-definitief zijn. Gebruik voor berekeningen viewDidLayoutSubviews of overschrijf updateViewConstraints.

Abonneer u niet op meldingen die alleen actief zijn wanneer het scherm zichtbaar is. Toetsenbordmeldingen, meldingen over inhoudswijzigingen van kind-controllers — abonneer ze in viewWillAppear en meld ze af in viewDidDisappear om onnodige aanroepen en geheugenlekken te voorkomen.

Roep geen methoden aan die een zichtbaar scherm vereisen. Bijvoorbeeld, een poging om UIAlertController vanuit viewDidLoad weer te geven, veroorzaakt een fout omdat de View van de controller nog niet is toegevoegd aan de vensterhiërarchie. Alle UI-bewerkingen die afhankelijk zijn van window of presentedViewController mogen alleen worden uitgevoerd nadat het scherm verschijnt.

Initialiseer geen zware bronnen zonder noodzaak. Als het scherm zelden wordt geopend of gegevens niet onmiddellijk worden weergegeven, stel het maken van resource-intensieve objecten dan uit tot het moment dat ze echt nodig zijn. Lazy-initialisatie van eigenschappen in Swift is een ingebouwd mechanisme om deze taak op te lossen: een eigenschap met de lazy-modifier wordt pas gemaakt bij de eerste toegang, wat geheugen bespaart en het laden van het scherm versnelt.

Gebruik viewDidLoad niet voor bewerkingen die bij elke weergave van het scherm moeten worden uitgevoerd. Dit is de meest fundamentele fout: beginnende ontwikkelaars plaatsen vaak updatelogica in viewDidLoad en zijn verbaasd dat de tabel niet opnieuw wordt geladen bij terugkeer van een ander scherm. Als de bewerking bij elke weergave moet worden herhaald — gebruik viewWillAppear. Als deze eenmalig tijdens de levensduur moet worden uitgevoerd — viewDidLoad. Onthoud deze eenvoudige regel om de meeste problemen met de levenscyclus van UIViewController te voorkomen.

Codevoorbeelden met viewDidLoad

Laten we drie praktische voorbeelden bekijken die het juiste gebruik van viewDidLoad in echte projecten demonstreren. Elk voorbeeld lost een specifieke taak van schermconfiguratie op.

Voorbeeld 1: configuratie van een verzameling met aangepaste cellen

swift
override func viewDidLoad() {
    super.viewDidLoad()
    collectionView.register(
        PhotoCell.self,
        forCellWithReuseIdentifier: PhotoCell.reuseId
    )
    collectionView.register(
        HeaderView.self,
        forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader,
        withReuseIdentifier: HeaderView.reuseId
    )
    viewModel.delegate = self
    viewModel.fetchInitialPage()
}

Voorbeeld 2: programmatische configuratie van constraints

swift
override func viewDidLoad() {
    super.viewDidLoad()
    let label = UILabel()
    label.text = "Hallo, wereld!"
    label.translatesAutoresizingMaskIntoConstraints = false
    view.addSubview(label)

    NSLayoutConstraint.activate([
        label.centerXAnchor.constraint(equalTo: view.centerXAnchor),
        label.centerYAnchor.constraint(equalTo: view.centerYAnchor)
    ])
}

Voorbeeld 3: configuratie van lege status en loader

In viewDidLoad worden ook elementen geconfigureerd die worden weergegeven bij afwezigheid van gegevens: lege status, loader, placeholder. Deze componenten worden eenmaal gemaakt en hergebruikt bij elke weergave van het scherm. Het verbergen of tonen van deze elementen wordt in viewWillAppear geregeld op basis van de actuele gegevens.

swift
override func viewDidLoad() {
    super.viewDidLoad()
    emptyStateLabel = UILabel()
    emptyStateLabel.text = "Geen gegevens"
    emptyStateLabel.textAlignment = .center
    emptyStateLabel.isHidden = true
    view.addSubview(emptyStateLabel)

    activityIndicator = UIActivityIndicatorView(style: .medium)
    activityIndicator.hidesWhenStopped = true
    view.addSubview(activityIndicator)
}

Voorbeeld 4: abonnement op applicatiemeldingen

swift
override func viewDidLoad() {
    super.viewDidLoad()
    NotificationCenter.default.addObserver(
        self,
        selector: #selector(handleEnterForeground),
        name: UIApplication.willEnterForegroundNotification,
        object: nil
    )
}

@objc private func handleEnterForeground() {
    refreshContent()
}

Veelgestelde vragen

Kan viewDidLoad meer dan één keer worden aangeroepen?

Onder normale omstandigheden niet — UIKit roept viewDidLoad één keer aan na het laden van View in het geheugen. Als de controller wordt vernietigd en opnieuw wordt gemaakt, werkt viewDidLoad voor de nieuwe instantie.

Moet super.viewDidLoad worden aangeroepen?

Ja, absoluut. Het aanroepen van super.viewDidLoad garandeert dat UIKit de interne configuratie uitvoert die nodig is voor de correcte werking van de Lifecycle. Roep altijd super als eerste aan in de methode.

Wat is het verschil tussen viewDidLoad en viewWillAppear?

viewDidLoad wordt één keer aangeroepen bij het laden van View. viewWillAppear wordt elke keer aangeroepen voordat het scherm verschijnt. De eerste — voor eenmalige configuratie, de tweede — voor het bijwerken van gegevens en status.

Kunnen zware bewerkingen worden uitgevoerd in viewDidLoad?

Zware synchrone bewerkingen in viewDidLoad blokkeren de main thread en vertragen het verschijnen van het scherm. Asynchrone ladingen zijn toegestaan, maar bij het bijwerken van de UI na voltooiing moet u er rekening mee houden dat het scherm mogelijk al verborgen is.

Hoe kan ik viewDidLoad geforceerd aanroepen?

Direct kan viewDidLoad niet worden aangeroepen — UIKit roept het aan. Om het laden van View te forceren, opent u de eigenschap controller.view. Dit activeert automatisch loadView en viewDidLoad.

Samenvatting

  • viewDidLoad — eenmalige configuratiemethode van UIViewController na het laden van View in het geheugen
  • Wordt één keer aangeroepen tijdens de levensduur van de controller bij de eerste toegang tot View
  • Geschikt voor registratie van cellen, configuratie van gedelegeerden, initialisatie van viewModel
  • Roep altijd super.viewDidLoad aan voor correcte werking van de Lifecycle
  • Gebruik viewDidLoad niet voor bewerkingen die afhankelijk zijn van de afmetingen van View
  • Voor het bijwerken van gegevens bij elke weergave gebruikt u viewWillAppear
  • Abonnement op permanente meldingen — geschikt, op tijdelijke — in viewWillAppear

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook