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:
-
Sterke verwijzingen (Strong References):
- Standaard, als je een eigenschap voor UIView declareert zonder de specificator
weakofunowned, 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() - Standaard, als je een eigenschap voor UIView declareert zonder de specificator
-
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 verwijzingnilwordt.
weak var parentView: UIView? - Worden gedeclareerd met het sleutelwoord
-
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 - Worden gedeclareerd met het sleutelwoord
-
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] = [] - Het opslaan van verwijzingen naar views in arrays (
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.