Sobes.tech
Junior — Middle

El tudná magyarázni, hogyan történik a memória felszabadítása, amelyet egy objektum foglal el a rendszerben?

sobes.tech MI

Válasz az MI-től

Az iOS-ben az objektumok memória felszabadítása elsősorban az ARC (Automatikus Hivatkozásszámlálás) mechanizmusával történik.

Minden objektumnak a memóriában van egy hivatkozásszámlálója: az aktív hivatkozások száma rá. Amikor létrejön egy hivatkozás egy objektumra, a számláló növekszik; amikor a hivatkozás törlésre kerül, csökken. Amikor a számláló eléri a nullát, az objektum automatikusan felszabadul a memóriából.

Példa:

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

var person1: Person? = Person(name: "Alex") // hivatkozásszám = 1
var person2 = person1 // hivatkozásszám = 2
person1 = nil // hivatkozásszám = 1
person2 = nil // hivatkozásszám = 0, az objektum felszabadul

Ha ciklikus hivatkozások (pl. két objektum, amelyek egymásra hivatkoznak) vannak, az ARC nem tudja automatikusan felszabadítani a memóriát. Ennek megoldására gyenge (weak) vagy nem tulajdonolt (unowned) hivatkozásokat használnak, amelyek nem növelik a számlálót.