Junior — Middle
Qual è la differenza tra i tipi di riferimenti Strong e Weak nella gestione della memoria e nel modello di riferimento?
sobes.tech AI
Risposta dell'AI
Strong-riferimento è un normale riferimento forte a un oggetto, che aumenta il contatore di riferimenti (conta di ritenzione) di quell'oggetto. Finché esiste almeno un riferimento forte, l'oggetto non verrà rimosso dalla memoria.
Weak-riferimento è un riferimento debole, che non aumenta il contatore di riferimenti dell'oggetto. Viene usato per prevenire cicli di ritenzione. Se l'oggetto a cui si riferisce il weak-riferimento viene eliminato, il weak-riferimento si azzera automaticamente (diventa nil).
Esempio in Swift:
class Person {
var name: String
init(name: String) { self.name = name }
var apartment: Apartment?
}
class Apartment {
let unit: String
weak var tenant: Person? // riferimento debole per evitare ciclo
init(unit: String) { self.unit = unit }
}
let john = Person(name: "John")
let apt = Apartment(unit: "4A")
john.apartment = apt
apt.tenant = john // riferimento debole
Qui, il riferimento debole tenant non mantiene l'oggetto Person, evitando perdite di memoria.