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.