Sobes.tech
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.