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.