Sobes.tech
Middle

Hoe worden views opgeslagen die een referentietype zijn?

sobes.tech AI

Antwoord van AI

Views (UIView en zijn subklassen) in iOS zijn klassen, dus referentietypen. Het opslaan van verwijzingen naar hen gebeurt via de volgende mechanismen:

  1. Sterke verwijzingen (Strong References):

    • Standaard, als je een eigenschap voor UIView declareert zonder de specificator weak of unowned, wordt er een sterke verwijzing gemaakt.
    • Een sterke verwijzing verhoogt de referentieteller van het object. Het object wordt niet uit het geheugen verwijderd zolang er ten minste één sterke verwijzing naar is.
    • Dit is de standaard manier van opslaan van views, wanneer ze in het geheugen moeten blijven en toegankelijk moeten zijn.
    //Sterke verwijzing
    var myView: UIView = UIView()
    
  2. Zwakke verwijzingen (Weak References):

    • Worden gedeclareerd met het sleutelwoord weak.
    • Een zwakke verwijzing verhoogt niet de referentieteller van het object.
    • Zwakke verwijzingen voorkomen niet dat het object uit het geheugen wordt verwijderd als er geen sterke verwijzingen meer zijn.
    • Worden gebruikt om cycli van sterke verwijzingen te voorkomen, een typische situatie is de ouder-kind relatie, waarbij de ouder een sterke verwijzing naar het kind heeft, en het kind soms een verwijzing naar de ouder. In dat geval moet de inverse verwijzing naar de ouder zwak zijn.
    • Zwakke verwijzingen moeten optioneel zijn (Optional), omdat het object verwijderd kan worden en de verwijzing nil wordt.
    weak var parentView: UIView?
    
  3. Onowned verwijzingen (Unowned References):

    • Worden gedeclareerd met het sleutelwoord unowned.
    • Net als zwakke verwijzingen, verhogen ze niet de referentieteller.
    • Verschil: in tegenstelling tot zwakke verwijzingen, zijn onowned verwijzingen niet optioneel. Ze gaan ervan uit dat het object minstens zo lang leeft als de verwijzing. Toegang tot het object na het vrijmaken ervan zal leiden tot een crash.
    • Worden gebruikt wanneer je zeker weet dat de levenscyclus van de verwijzing niet langer is dan die van het doelobject. In de context van views is dit minder gebruikelijk dan weak.
    //Minder gebruikelijk voor views, maar mogelijk
    unowned var childView: UIView
    
  4. Arrays en Collecties:

    • Het opslaan van verwijzingen naar views in arrays (Array), woordenboeken (Dictionary) of verzamelingen (Set) creëert ook standaard sterke verwijzingen naar de elementen van de collectie.
    var subviews: [UIView] = []
    

De keuze tussen sterke, zwakke of onowned verwijzingen hangt af van het specifieke gebruiksscenario en het beheer van de levenscyclus van de objecten om geheugenlekken te voorkomen. In SwiftUI zijn de concepten van levenscyclusbeheer van views anders, maar in UIKit blijven deze mechanismen de belangrijkste manier van opslag van verwijzingen.