Hoe wordt het geheugenbeheer voor referentietypes in Swift uitgevoerd?
sobes.tech AI
Antwoord van AI
In Swift wordt het geheugenbeheer voor referentietypen (klassen) uitgevoerd door automatische referentietelling (ARC, Automatic Reference Counting). Elk object op de heap houdt een referentieteller bij: het aantal actieve referenties naar dat object. Wanneer een nieuwe referentie naar een object wordt gemaakt, wordt de teller verhoogd, en wanneer de referentie niet meer wordt gebruikt, wordt deze verlaagd. Wanneer de teller nul bereikt, wordt het object automatisch uit het geheugen verwijderd.
Voorbeeld:
class Person {
var name: String
init(name: String) {
self.name = name
}
}
var a: Person? = Person(name: "Alice") // teller = 1
var b = a // teller = 2
b = nil // teller = 1
a = nil // teller = 0, object wordt verwijderd
Het is belangrijk om cyclische referenties (retained cycles) te voorkomen, waarbij twee objecten naar elkaar verwijzen, wat het vrijmaken van geheugen verhindert. Hiervoor worden zwakke (weak) en niet-eigenlijke (unowned) referenties gebruikt.
Value types (structuren, enumeraties) worden op de stack opgeslagen en bij toewijzing gekopieerd, dus ARC wordt niet op hen toegepast.