Sobes.tech
Junior — Middle

Ar galite paaiškinti, kaip vyksta atminties, kurią užima objektas, laisvinimas sistemoje?

sobes.tech AI

Atsakymas iš AI

iOS, objektų atlaisvinimas atmintyje vyksta daugiausia naudojant ARC (Automatinį nuorodų skaitiklį) mechanizmą.

Kiekvienas objektas atmintyje turi nuorodų skaitiklį – aktyvių nuorodų skaičių į jį. Kai sukuriama nuoroda į objektą, skaitiklis didėja; kai nuoroda pašalinama, mažėja. Kai skaitiklis pasiekia nulį, objektas automatiškai išlaisvinamas iš atminties.

Pavyzdys:

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

var person1: Person? = Person(name: "Alex") // nuorodų skaitiklis = 1
var person2 = person1 // nuorodų skaitiklis = 2
person1 = nil // nuorodų skaitiklis = 1
person2 = nil // nuorodų skaitiklis = 0, objektas išlaisvinamas

Jei yra ciklinės nuorodos (pavyzdžiui, du objektai, kurie nurodo vienas į kitą), ARC negali automatiškai atlaisvinti atminties. Šiam tikslui naudojamos silpnos (weak) arba nevaldančios (unowned) nuorodos, kurios nepadidina skaitiklio.