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