Sobes.tech
Junior — Middle

Poate o referință puternică într-o entitate să conducă la scurgeri de memorie?

sobes.tech AI

Răspuns de la AI

Da, prezența referințelor puternice între obiecte în iOS poate duce la scurgeri de memorie, mai ales dacă apare un ciclu de referință (ciclu de retenție). Acest lucru se întâmplă atunci când două obiecte se mențin reciproc prin referințe puternice, iar sistemul ARC nu le poate elibera, deoarece contorul de referințe al ambelor nu ajunge la zero.

Pentru a preveni astfel de scurgeri, se folosesc referințe slabe (weak) sau fără deținător (unowned), care nu cresc contorul de referințe și permit ruperea ciclului.

Exemplu de ciclu de referință:

class Person {
    var apartment: Apartment?
}

class Apartment {
    var tenant: Person?
}

let person = Person()
let apartment = Apartment()
person.apartment = apartment
apartment.tenant = person // aici apare un ciclu de retenție

Pentru a evita scurgerea, se poate face ca una dintre referințe să fie slabă:

class Apartment {
    weak var tenant: Person?
}