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