Sobes.tech
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.