Sobes.tech
Junior — Middle

Op welke plek in het geheugen of in welk mechanisme wordt de verwijzing beheerd die de referentieteller niet verhoogt en het object niet vasthoudt?

sobes.tech AI

Antwoord van AI

In iOS, bij gebruik van automatische geheugenbeheer (ARC), bestaat het concept van zwakke (weak) referenties. Een zwakke referentie is een verwijzing naar een object die de referentieteller (retain count) niet verhoogt en het object niet in het geheugen houdt.

Deze referenties worden meestal geïmplementeerd met behulp van een mechanisme van zwakke pointers, die worden opgeslagen in een speciaal geheugengebied dat door het ARC-systeem wordt beheerd. Wanneer het object waarnaar de zwakke referentie wijst wordt vrijgegeven, wordt de zwakke referentie automatisch op nil gezet om dangling pointers te voorkomen.

Op deze manier beïnvloedt een zwakke referentie de levenscyclus van het object niet en houdt het het niet in het geheugen. Dit is handig om cyclische referenties te voorkomen, bijvoorbeeld tussen een delegate en de eigenaar.

Voorbeeld in Swift:

class Person {
    var name: String
    weak var delegate: PersonDelegate?
    init(name: String) {
        self.name = name
    }
}

protocol PersonDelegate: AnyObject {
    func didUpdateName()
}

Hier is delegate een zwakke referentie die de referentieteller niet verhoogt en het delegate-object niet vasthoudt.