Sobes.tech
Junior — Middle

Cum are loc distribuirea și eliberarea memoriei pentru tipurile de date referențiale?

sobes.tech AI

Răspuns de la AI

În iOS, pentru tipurile de referință (de exemplu, clase), memoria este alocată dinamic în heap. Când se creează un obiect de clasă, sistemul alocă memorie în heap pentru acesta și returnează o referință către acel obiect.

Eliberarea memoriei se face prin numărătoarea 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 referință nouă, contorul crește, iar când referința este eliminată sau devine nil, scade. Când contorul ajunge la zero, obiectul este eliminat automat din memorie.

Exemplu:

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

var person1: Person? = Person(name: "Иван") // contor de referințe = 1
var person2 = person1 // contor de referințe = 2
person1 = nil // contor de referințe = 1
person2 = nil // contor de referințe = 0, obiectul Person este eliminat din memorie

Astfel, dezvoltatorul nu trebuie să elibereze manual memoria — ARC gestionează acest lucru automat.