Junior — Middle
Jak probíhá rozdělení a uvolnění paměti pro referenční datové typy?
sobes.tech AI
Odpověď od AI
V iOS je paměť pro referenční typy (například třídy) dynamicky přidělována na haldě (heap). Když je vytvořen objekt třídy, systém mu přidělí paměť na haldě a vrátí odkaz na tento objekt.
Uvolnění paměti probíhá pomocí automatického počítání odkazů (ARC — Automatic Reference Counting). Každý objekt udržuje čítač odkazů — počet aktivních odkazů na něj. Když je vytvořen nový odkaz, čítač se zvýší, a když je odkaz odstraněn nebo se stane nil, 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 person1: Person? = Person(name: "Иван") // čítač odkazů = 1
var person2 = person1 // čítač odkazů = 2
person1 = nil // čítač odkazů = 1
person2 = nil // čítač odkazů = 0, objekt Person je odstraněn z paměti
Tímto způsobem se vývojář nemusí starat o ruční uvolnění paměti — ARC to spravuje automaticky.