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