Sobes.tech
Junior — Middle

Hogyan történik a memória felszabadítása a referencia típusú objektumok esetén?

sobes.tech MI

Válasz az MI-től

iOS-en a referencia típusokkal (például Swift vagy Objective-C osztályok) létrehozott objektumokat az automatikus hivatkozásszámlálás (ARC — Automatic Reference Counting) rendszer kezeli. Minden objektum tárol egy hivatkozásszámlálót — az aktív hivatkozások számát. Amikor új hivatkozás jön létre az objektumra, a számláló növekszik, és amikor a hivatkozás már nem használatos (például, egy változó kilép a hatókörből vagy nil értékre állítódik), a számláló csökken.

Amikor egy objektum hivatkozásszámlálója eléri a nullát, az azt jelenti, hogy már senki sem hivatkozik rá, és az objektum által foglalt memória automatikusan felszabadul. Ez segít elkerülni a memória szivárgásokat manuális kezelés nélkül.

Swift példában:

class Person {
    var name: String
    init(name: String) {
        self.name = name
    }
    deinit {
        print("Person \(name) felszabadult")
    }
}

var p1: Person? = Person(name: "Ivan")
var p2 = p1 // a hivatkozásszám növekedett
p1 = nil // a számláló csökkent, de az objektum még él
p2 = nil // a számláló 0, az objektum felszabadult

Fontos elkerülni a ciklikus hivatkozásokat (retain cycles), amikor két objektum egymásra hivatkozik, ami megakadályozza a memória felszabadulását. Ehhez weak vagy unowned hivatkozásokat használnak.