Junior — Middle
Is het mogelijk dat er cyclische verwijzingen ontstaan die het garbage collection in de automatische geheugenbeheer verhinderen?
sobes.tech AI
Antwoord van AI
Ja, op iOS kan bij gebruik van automatische geheugenbeheer (ARC) het ontstaan van cycli van referenties (retain cycles) optreden. Dit gebeurt wanneer twee of meer objecten elkaar vasthouden via sterke referenties, waardoor de referentieteller niet op nul komt en de objecten niet worden vrijgegeven.
Om dergelijke situaties te voorkomen, worden zwakke (weak) of zonder eigenaar (unowned) referenties gebruikt. Bijvoorbeeld, delegates worden meestal als weak gedeclareerd om cycli te voorkomen.
Voorbeeld:
class Person {
var apartment: Apartment?
}
class Apartment {
weak var tenant: Person? // zwakke referentie voorkomt cyclus
}
let john = Person()
let unit4A = Apartment()
john.apartment = unit4A
unit4A.tenant = john
In dit voorbeeld is tenant een zwakke referentie, dus er ontstaat geen cyclus en de objecten worden correct vrijgegeven door de garbage collector.