Sobes.tech
Junior — Middle

Cum are loc eliberarea memoriei pentru obiectele create folosind tipul de referință?

sobes.tech AI

Răspuns de la AI

În iOS, obiectele create folosind tipuri de referință (de exemplu, clase în Swift sau Objective-C) sunt gestionate de sistemul de numărare automată a referințelor (ARC — Automatic Reference Counting). Fiecare obiect păstrează un contor de referințe — numărul de referințe active către el. Când se creează o nouă referință la obiect, contorul crește, iar când referința nu mai este utilizată (de exemplu, o variabilă iese din domeniu sau i se atribuie nil), contorul scade.

Când contorul de referințe al unui obiect ajunge la zero, înseamnă că nimeni nu mai face referire la el, iar memoria ocupată de obiect este eliberată automat. Acest lucru ajută la evitarea scurgerilor de memorie fără gestionare manuală.

Exemplu în Swift:

class Person {
    var name: String
    init(name: String) {
        self.name = name
    }
    deinit {
        print("Persoana \(name) a fost eliberată")
    }
}

var p1: Person? = Person(name: "Ivan")
var p2 = p1 // contorul de referințe a crescut
p1 = nil // contorul a scăzut, dar obiectul încă trăiește
p2 = nil // contorul a ajuns la 0, obiectul a fost eliberat

Este important să evitați referințele ciclice (retained cycles), când două obiecte se referă reciproc, ceea ce împiedică eliberarea memoriei. Pentru aceasta, se folosesc referințe weak sau unowned.