Sobes.tech
Junior — Middle

Hogyan történik a memória kiosztása és felszabadítása a referenciatípusok esetében?

sobes.tech MI

Válasz az MI-től

Az iOS-ben a referencia típusok (pl. osztályok) memóriája dinamikusan van kiosztva a heap-en. Amikor egy osztályobjektumot hozunk létre, a rendszer memóriát foglal a heap-en erre az objektumra, és egy hivatkozást ad vissza erre az objektumra.

A memória felszabadítása automatikus hivatkozásszámlálással (ARC — Automatic Reference Counting) történik. Minden objektum tartalmaz egy hivatkozásszámlálót — az aktív hivatkozások számát. Amikor új hivatkozás jön létre, a számláló növekszik, és amikor a hivatkozás törlésre kerül vagy nil lesz, csökken. Amikor a számláló eléri a nullát, az objektum automatikusan törlődik a memóriából.

Példa:

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

var person1: Person? = Person(name: "Иван") // hivatkozásszám = 1
var person2 = person1 // hivatkozásszám = 2
person1 = nil // hivatkozásszám = 1
person2 = nil // hivatkozásszám = 0, a Person objektum törlődik a memóriából

Így a fejlesztőnek nem kell manuálisan felszabadítania a memóriát — az ARC ezt automatikusan kezeli.