Sobes.tech
Middle

Cum se gestionează memoria pentru tipurile de referință în Swift?

sobes.tech AI

Răspuns de la AI

În Swift, gestionarea memoriei pentru tipurile de referință (clase) se realizează prin numărare automată a referințelor (ARC, Automatic Reference Counting). Fiecare obiect din heap păstrează un contor de referințe: numărul de referințe active către acel obiect. Când se creează o referință nouă către un obiect, contorul crește, iar când referința nu mai este utilizată, scade. Când contorul ajunge la zero, obiectul este șters automat din memorie.

Exemplu:

class Person {
    var name: String
    init(name: String) {
        self.name = name
    }
}

var a: Person? = Person(name: "Alice") // contor = 1
var b = a                             // contor = 2
b = nil                              // contor = 1
a = nil                              // contor = 0, obiectul este șters

Este important să evitați ciclurile de referințe (retained cycles), când două obiecte se referă reciproc, ceea ce împiedică eliberarea memoriei. Pentru aceasta, se folosesc referințe slabe (weak) și fără deținere (unowned).

Tipurile de valoare (structuri, enumerări) sunt stocate pe stivă și copiate la atribuție, așa că ARC nu se aplică lor.