Sobes.tech
Junior — Middle

Este posibil ca referințele ciclice să apară și să împiedice colectarea gunoiului în managerul de memorie automat?

sobes.tech AI

Răspuns de la AI

Da, pe iOS, atunci când se utilizează gestionarea automată a memoriei (ARC), poate apărea crearea de cicluri de referințe (retains). Acest lucru se întâmplă atunci când două sau mai multe obiecte se mențin reciproc prin referințe puternice, ceea ce împiedică contorul de referințe să ajungă la zero și, astfel, obiectele nu sunt eliberate.

Pentru a evita astfel de situații, se folosesc referințe slabe (weak) sau fără deținător (unowned). De exemplu, delegații sunt de obicei declarați ca weak pentru a preveni ciclurile.

Exemplu:

class Person {
    var apartment: Apartment?
}

class Apartment {
    weak var tenant: Person?  // referință slabă pentru a preveni ciclul
}

let john = Person()
let unit4A = Apartment()
john.apartment = unit4A
unit4A.tenant = john

În acest exemplu, tenant este o referință slabă, deci nu se formează un ciclu, iar obiectele vor fi eliberate corect de către colectorul de gunoi.