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.