Hoe wordt het geheugen vrijgemaakt voor objecten die met een referentietype zijn gemaakt?
sobes.tech AI
Antwoord van AI
In iOS worden objecten die met referentietypen (bijvoorbeeld klassen in Swift of Objective-C) zijn gemaakt, beheerd door het systeem van automatische referentietelling (ARC — Automatic Reference Counting). Elk object houdt een referentieteller bij — het aantal actieve verwijzingen naar het. Wanneer een nieuwe verwijzing naar het object wordt gemaakt, wordt de teller verhoogd, en wanneer de verwijzing niet meer wordt gebruikt (bijvoorbeeld, een variabele verlaat de scope of wordt op nil gezet), wordt de teller verlaagd.
Wanneer de referentieteller van een object nul bereikt, betekent dit dat er geen verwijzingen meer naar zijn, en het geheugen dat door het object wordt ingenomen, wordt automatisch vrijgegeven. Dit helpt geheugenlekken te voorkomen zonder handmatig beheer.
Voorbeeld in Swift:
class Person {
var name: String
init(name: String) {
self.name = name
}
deinit {
print("Persoon \(name) vrijgegeven")
}
}
var p1: Person? = Person(name: "Ivan")
var p2 = p1 // de referentieteller is verhoogd
p1 = nil // de teller is verlaagd, maar het object leeft nog
p2 = nil // de teller is 0, het object is vrijgegeven
Het is belangrijk om cyclische verwijzingen (retain cycles) te vermijden, wanneer twee objecten naar elkaar verwijzen, wat het vrijgeven van geheugen verhindert. Hiervoor worden weak of unowned referenties gebruikt.