Sobes.tech
Middle

Jak je v Swiftu prováděno řízení paměti pro referenční typy?

sobes.tech AI

Odpověď od AI

V Swiftu je správa paměti pro referenční typy (třídy) prováděna pomocí automatického počítání odkazů (ARC, Automatic Reference Counting). Každý objekt na haldě udržuje čítač odkazů: počet aktivních odkazů na tento objekt. Když je vytvořen nový odkaz na objekt, čítač se zvýší, a když odkaz přestane být používán, sníží se. Když čítač dosáhne nuly, objekt je automaticky odstraněn z paměti.

Pří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 odstraněn

Je důležité se vyhnout cyklickým odkazům (retain cycles), kdy dva objekty odkazují na sebe navzájem, což brání uvolnění paměti. K tomu se používají slabé (weak) a bez vlastnictví (unowned) odkazy.

Typy hodnot (struktury, výčty) jsou uloženy na zásobníku a při přiřazení se kopírují, proto na ně ARC neplatí.