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.