Sobes.tech
Junior — Middle

Hogyan szabadul fel a memória, amit egy objektum foglal el egy programban?

sobes.tech MI

Válasz az MI-től

iOS-ben a memória felszabadítása főként automatikusan történik a ARC (Automatic Reference Counting) rendszer segítségével. Minden objektumnak van egy hivatkozásszámlálója, amely növekszik új erős hivatkozás létrehozásakor, és csökken, amikor az eltávolításra kerül. Amikor a számláló eléri a nullát, az objektum automatikusan megsemmisül, és a memória felszabadul.

Ha a kódban ciklikus hivatkozások fordulnak elő (például két objektum erős hivatkozásokkal egymásra), akkor a memória nem szabadul fel. Ennek megoldására gyenge (weak) vagy tulajdon nélküli (unowned) hivatkozásokat használnak.

Példa:

class Person {
    var name: String
    weak var apartment: Apartment? // gyenge hivatkozás a ciklus elkerülése érdekében
    init(name: String) {
        self.name = name
    }
}

class Apartment {
    let unit: String
    unowned let tenant: Person // tulajdon nélküli hivatkozás
    init(unit: String, tenant: Person) {
        self.unit = unit
        self.tenant = tenant
    }
}

Így, ha a hivatkozásokat helyesen kezelik, a memória automatikusan felszabadul.