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.