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í.