Sobes.tech
Junior — Middle

Kā notiek atsauces datu tipu atmiņas sadale un brīvlaišana?

sobes.tech AI

Atbilde no AI

iOS gadījumā, attiecībā uz atsauces tipiem (piemēram, klasēm), atmiņa tiek dinamiski piešķirta heap. Kad tiek izveidots klases objekts, sistēma tam piešķir atmiņu heap un atgriež atsauci uz šo objektu.

Atmiņas atbrīvošana notiek ar automātisku atsauču skaitīšanu (ARC — Automatic Reference Counting). Katrs objekts glabā atsauču skaitītāju — aktīvo atsauču skaitu uz to. Kad tiek izveidota jauna atsauce, skaitītājs palielinās, un kad atsauce tiek dzēsta vai kļūst nil, tas samazinās. Kad skaitītājs sasniedz nulli, objekts automātiski tiek izņemts no atmiņas.

Piemērs:

class Person {
    var name: String
    init(name: String) {
        self.name = name
    }
}

var person1: Person? = Person(name: "Иван") // atsauču skaitītājs = 1
var person2 = person1 // atsauču skaitītājs = 2
person1 = nil // atsauču skaitītājs = 1
person2 = nil // atsauču skaitītājs = 0, Person objekts tiek izņemts no atmiņas

Šādā veidā, izstrādātājam nav nepieciešams manuāli atbrīvot atmiņu — ARC to dara automātiski.