Junior — Middle
Ako prebieha rozdeľovanie a uvoľňovanie pamäte pre referenčné dátové typy?
sobes.tech AI
Odpoveď od AI
V iOS, pre referenčných typov (napríklad, tried) sa pamäť dynamicky prideľuje na halde (heap). Keď sa vytvorí objekt triedy, systém mu pridelení pamäť na halde a vráti odkaz na tento objekt.
Uvoľnenie pamäti sa vykonáva pomocou automatického počítania odkazov (ARC — Automatic Reference Counting). Každý objekt udržiava čítač odkazov — počet aktívnych odkazov na neho. Keď sa vytvorí nový odkaz, čítač sa zvýši, a keď odkaz je odstránený alebo sa stane nil, zníži sa. Keď čítač dosiahne nulu, objekt sa automaticky odstráni z pamäti.
Príklad:
class Person {
var name: String
init(name: String) {
self.name = name
}
}
var person1: Person? = Person(name: "Иван") // čítač odkazov = 1
var person2 = person1 // čítač odkazov = 2
person1 = nil // čítač odkazov = 1
person2 = nil // čítač odkazov = 0, objekt Person sa odstráni z pamäti
Týmto spôsobom, vývojár nemusí manuálne uvoľňovať pamäť — ARC to spravuje automaticky.