Sobes.tech
Junior — Middle

Kan een sterke verwijzing in een entiteit leiden tot geheugenlekken?

sobes.tech AI

Antwoord van AI

Ja, het bestaan van sterke verwijzingen tussen objecten in iOS kan leiden tot geheugenlekken, vooral als er een cyclische verwijzing (retentiecyclus) ontstaat. Dit gebeurt wanneer twee objecten elkaar vasthouden via sterke verwijzingen, en het ARC-systeem ze niet kan vrijgeven omdat de referentieteller van beide niet op nul komt.

Om dergelijke lekken te voorkomen, worden zwakke (weak) of zonder eigenaar (unowned) verwijzingen gebruikt, die de referentieteller niet verhogen en de cyclus kunnen doorbreken.

Voorbeeld van een cyclische verwijzing:

class Person {
    var apartment: Apartment?
}

class Apartment {
    var tenant: Person?
}

let person = Person()
let apartment = Apartment()
person.apartment = apartment
apartment.tenant = person // hier ontstaat een retentiecyclus

Om de lek te voorkomen, kan een van de verwijzingen zwak worden gemaakt:

class Apartment {
    weak var tenant: Person?
}