Junior — Middle
Kaip vyksta nuorodinių duomenų tipų atminties paskirstymas ir laisvavimas?
sobes.tech AI
Atsakymas iš AI
iOS, referencinių tipų (pvz., klasių) atveju, atmintis dinamiškai paskirstoma heap'e. Kai sukuriamas klasės objektas, sistema jam paskiria atmintį heap'e ir grąžina nuorodą į tą objektą.
Atminties išlaisvinimas vyksta naudojant automatinį nuorodų skaitiklį (ARC — Automatic Reference Counting). Kiekvienas objektas saugo nuorodų skaitiklį — aktyvių nuorodų skaičių į jį. Kai sukuriama nauja nuoroda, skaitiklis didėja, o kai nuoroda ištrinama arba tampa nil, mažėja. Kai skaitiklis pasiekia nulį, objektas automatiškai pašalinamas iš atminties.
Pavyzdys:
class Person {
var name: String
init(name: String) {
self.name = name
}
}
var person1: Person? = Person(name: "Иван") // nuorodų skaitiklis = 1
var person2 = person1 // nuorodų skaitiklis = 2
person1 = nil // nuorodų skaitiklis = 1
person2 = nil // nuorodų skaitiklis = 0, Person objektas pašalinamas iš atminties
Šiuo būdu, programuotojui nereikia rankiniu būdu laisvinti atminties — ARC tai daro automatiškai.