Sobes.tech
Middle

Ako sa v Swift spravuje pamäť pre referenčné typy?

sobes.tech AI

Odpoveď od AI

V Swiftu sa správa pamäte pre referenčných typov (triedy) pomocou automatického počítania odkazov (ARC, Automatic Reference Counting). Každý objekt na halde udržiava čítač odkazov: počet aktívnych odkazov na tento objekt. Keď sa vytvorí nový odkaz na objekt, čítač sa zvýši, a keď odkaz prestane byť používaný, zníži sa. Keď čítač dosiahne nulu, objekt sa automaticky odstráni z pamäte.

Príklad:

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

var a: Person? = Person(name: "Alice") // čítač = 1
var b = a                             // čítač = 2
b = nil                              // čítač = 1
a = nil                              // čítač = 0, objekt je odstrá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äte. Na to sa používajú slabé (weak) a bezvlastnícke (unowned) odkazy.

Typy hodnôt (štruktúry, enumy) sa ukladajú na zásobník a pri priraďovaní sa kopírujú, preto na ne neplatí ARC.