Junior — Middle
Hoe wordt het geheugen voor objecten met cyclische verwijzingen vrijgemaakt in beheerde omgevingen?
sobes.tech AI
Antwoord van AI
In beheerde omgevingen zoals iOS met ARC (Automatisch Referentie Telling), gebeurt het vrijmaken van geheugen voor objecten met cyclische verwijzingen niet automatisch, omdat ARC cycli niet kan doorbreken.
Om dit probleem op te lossen, worden zwakke (weak) en onbezitende (unowned) verwijzingen gebruikt, die de referentieteller van het object niet verhogen. Dit maakt het mogelijk om cycli te doorbreken en het geheugen correct vrij te maken.
Voorbeeld:
class Person {
var name: String
weak var apartment: Apartment? // zwakke verwijzing
init(name: String) {
self.name = name
}
}
class Apartment {
let unit: String
unowned let tenant: Person // onbezitende verwijzing
init(unit: String, tenant: Person) {
self.unit = unit
self.tenant = tenant
}
}
Hier verwijzen Person en Apartment naar elkaar, maar een van de verwijzingen is zwak, wat geheugenlekken voorkomt.
Als cycli niet worden doorbroken, blijven de objecten in het geheugen ondanks het ontbreken van externe verwijzingen, wat leidt tot geheugenlekken.