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.