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