Junior — Middle
Può una forte referenza in un'entità portare a perdite di memoria?
sobes.tech AI
Risposta dell'AI
Sì, la presenza di riferimenti forti tra oggetti in iOS può portare a perdite di memoria, specialmente se si verifica un ciclo di riferimento (retention cycle). Questo accade quando due oggetti si tengono reciprocamente tramite riferimenti forti, e il sistema ARC non può liberarli perché il contatore di riferimenti di entrambi non raggiunge zero.
Per prevenire queste perdite, si usano riferimenti deboli (weak) o senza proprietario (unowned), che non aumentano il contatore di riferimenti e permettono di rompere il ciclo.
Esempio di ciclo di riferimento:
class Person {
var apartment: Apartment?
}
class Apartment {
var tenant: Person?
}
let person = Person()
let apartment = Apartment()
person.apartment = apartment
apartment.tenant = person // qui si verifica un ciclo di retention
Per evitare la perdita, si può rendere uno dei riferimenti debole:
class Apartment {
weak var tenant: Person?
}