Sobes.tech
Junior — Middle

Vai jūs varat izskaidrot, kā notiek atmiņas atbrīvošana, ko aizņem objekts sistēmā?

sobes.tech AI

Atbilde no AI

iOS, objektu atmiņas brīvlaišana galvenokārt notiek, izmantojot ARC (Automātisko atsauču skaitīšanu) mehānismu.

Katram objektam atmiņā ir atsauču skaitītājs — aktīvo atsauču skaits uz to. Kad tiek izveidota atsauce uz objektu, skaitītājs palielinās; kad atsauce tiek dzēsta, tas samazinās. Kad skaitītājs sasniedz nulli, objekts automātiski tiek atbrīvots no atmiņas.

Piemērs:

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

var person1: Person? = Person(name: "Alex") // 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, objekts tiek atbrīvots

Ja pastāv cikliskas atsauces (piemēram, divi objekti, kas atsaucas viens uz otru), ARC nevar automātiski atbrīvot atmiņu. Šim nolūkam tiek izmantotas vājas (weak) vai neuzraudzītas (unowned) atsauces, kas nepalielina skaitītāju.