Junior — Middle
È possibile implementare un meccanismo che traccia gli oggetti usando riferimenti deboli, senza impedire la loro rimozione da parte del garbage collector?
sobes.tech AI
Risposta dell'AI
Sì, su iOS (e in Swift) esiste un meccanismo di riferimenti deboli (weak references), che consente di monitorare gli oggetti senza mantenerli in memoria e prevenire la loro eliminazione da parte del garbage collector (ARC).
Un riferimento debole non aumenta il contatore di riferimenti dell'oggetto, quindi quando non ci sono più riferimenti forti, l'oggetto viene liberato dalla memoria.
Esempio di utilizzo di un riferimento debole in Swift:
class Person {
let name: String
init(name: String) {
self.name = name
}
}
class Apartment {
weak var tenant: Person? // riferimento debole
}
var person: Person? = Person(name: "Ivan")
var apartment: Apartment? = Apartment()
apartment?.tenant = person
person = nil // l'oggetto Person sarà eliminato, poiché non ci sono più riferimenti forti
print(apartment?.tenant) // nil
In questo modo, i riferimenti deboli consentono di monitorare gli oggetti senza impedire la loro eliminazione.