Junior — Middle
Kuidas toimub viidetüüpide mälu jaotamine ja vabastamine?
sobes.tech AI
Vastus AI-lt
iOS puhul, referentsliikide (näiteks klasside) puhul jagatakse mälu dünaamiliselt heap'is. Kui luuakse klassi objekt, eraldab süsteem talle heap'is mälu ja tagastab viite sellele objektile.
Mälu vabastamine toimub automaatse viidete loendamise (ARC — Automatic Reference Counting) abil. Igal objektil on viidete loendur — aktiivsete viidete arv sellele. Kui luuakse uus viide, suureneb loendur, ja kui viide kustutatakse või muutub nil-iks, väheneb see. Kui loendur jõuab nulli, eemaldatakse objekt automaatselt mälust.
Näide:
class Person {
var name: String
init(name: String) {
self.name = name
}
}
var person1: Person? = Person(name: "Иван") // viidete loendur = 1
var person2 = person1 // viidete loendur = 2
person1 = nil // viidete loendur = 1
person2 = nil // viidete loendur = 0, Person objekt eemaldatakse mälust
Selle kaudu ei ole arendajal vaja mälu käsitsi vabastada — ARC haldab seda automaatselt.