Sobes.tech
Junior

Wat is een geheugenlek en hoe ontstaat het?

sobes.tech AI

Antwoord van AI

Een geheugenlek is een situatie waarin een programma geheugen toewijst voor objecten, maar nadat ze niet meer nodig zijn, worden de verwijzingen naar hen niet verwijderd en kan de garbage collector dat geheugen niet vrijmaken. Op iOS, waar ARC (Automatische Referentietelling) wordt gebruikt, komen geheugenlekken vaak voor door cyclische verwijzingen, bijvoorbeeld wanneer twee objecten naar elkaar verwijzen via sterke verwijzingen, en geen van hen wordt vrijgegeven.

Voorbeeld van een cyclische verwijzing in Swift:

class A {
    var b: B?
}

class B {
    var a: A?
}

let a = A()
let b = B()

a.b = b
b.a = a
// Beide objecten verwijzen naar elkaar, ARC kan ze niet automatisch vrijmaken

Om lekken te voorkomen, worden zwakke (weak) of onbezitende (unowned) verwijzingen gebruikt, die de referentieteller niet verhogen en het correct vrijmaken van de objecten mogelijk maken.