Sobes.tech
Junior — Middle

Ako sa uvoľňuje pamäť u objektov vytvorených pomocou referenčného typu?

sobes.tech AI

Odpoveď od AI

V iOS sú objekty vytvorené pomocou referenčných typov (napríklad triedy v Swift alebo Objective-C) spravované systémom automatického počítania odkazov (ARC — Automatic Reference Counting). Každý objekt udržičí čítač odkazov — počet aktívnych odkazov na neho. Keď sa vytvorí nová referencia na objekt, čítač sa zvýši, a keď referencia prestane byť používaná (napríklad, premenná opustí rozsah alebo je priradená na nil), čítač sa zníži.

Keď čítač odkazov objektu dosiahne nulu, znamená to, že na neho nikto neukazuje, a pamäť obsadená objektom sa automaticky uvoľní. To pomáha predísť únikom pamäti bez potreby manuálneho riadenia.

Príklad v Swift:

class Person {
    var name: String
    init(name: String) {
        self.name = name
    }
    deinit {
        print("Osoba \(name) bola uvoľnená")
    }
}

var p1: Person? = Person(name: "Ivan")
var p2 = p1 // čítač odkazov sa zvýšil
p1 = nil // čítač sa znížil, ale objekt stále existuje
p2 = nil // čítač je 0, objekt bol uvoľnený

Je dôležité vyhýbať sa cyklickým odkazom (retain cycles), keď si dva objekty navzájom odkazujú, čo bráni uvoľneniu pamäti. Na to sa používajú weak alebo unowned odkazy.