Sobes.tech
Middle

Hogyan történik a memória kezelés a referencia típusok esetén Swiftben?

sobes.tech MI

Válasz az MI-től

Swiftben a hivatkozástípusok (osztályok) memória kezelése automatikus hivatkozásszámlálással (ARC, Automatic Reference Counting) történik. Minden objektum a heapen tartalmaz egy hivatkozásszámlálót: az aktív hivatkozások számát erre az objektumra. Amikor új hivatkozás jön létre egy objektumra, a számláló növekszik, és amikor a hivatkozás már nem használatos, 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 a: Person? = Person(name: "Alice") // számláló = 1
var b = a                             // számláló = 2
b = nil                              // számláló = 1
a = nil                              // számláló = 0, az objektum törlődik

Fontos elkerülni a ciklikus hivatkozásokat (retain cycles), amikor két objektum egymásra hivatkozik, ami megakadályozza a memória felszabadítását. Ehhez gyenge (weak) és tulajdon nélküli (unowned) hivatkozásokat használnak.

Az értéktípusok (struktúrák, enumerációk) a veremben tárolódnak és másolódnak az értékadáskor, ezért az ARC nem alkalmazható rájuk.