Sobes.tech
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.