Junior — Middle
Is het mogelijk om een mechanisme te implementeren dat objecten volgt met behulp van zwakke referenties, zonder hun verwijdering door de garbage collector te voorkomen?
sobes.tech AI
Antwoord van AI
Ja, op iOS (en Swift) bestaat een mechanisme van zwakke referenties (weak references), waarmee objecten kunnen worden gevolgd zonder ze in het geheugen te houden en het verwijderen door de garbage collector (ARC) te voorkomen.
Een zwakke referentie verhoogt niet de referentieteller van het object, dus wanneer er geen sterke referenties meer zijn, wordt het object vrijgegeven uit het geheugen.
Voorbeeld van het gebruik van een zwakke referentie in Swift:
class Person {
let name: String
init(name: String) {
self.name = name
}
}
class Apartment {
weak var tenant: Person? // zwakke referentie
}
var person: Person? = Person(name: "Ivan")
var apartment: Apartment? = Apartment()
apartment?.tenant = person
person = nil // het Person-object wordt verwijderd, omdat er geen sterke referenties meer zijn
print(apartment?.tenant) // nil
Op deze manier maken zwakke referenties het mogelijk om objecten te volgen zonder hun verwijdering te belemmeren.