Junior — Middle
Kas saaksite selgitada, kuidas toimub mälu vabastamine, mida objekt süsteemis hõivab?
sobes.tech AI
Vastus AI-lt
iOS-is objektide mälu vabastamine toimub peamiselt ARC (Automaatne viidete arv) mehhanismi kaudu.
Igal objektil on mälu sees viidete loendur: aktiivsete viidete arv sellele. Kui luuakse viide objekti, suureneb loendur; kui viide eemaldatakse, väheneb. Kui loendur jõuab nulli, eemaldatakse objekt automaatselt mälust.
Näide:
class Person {
var name: String
init(name: String) {
self.name = name
}
}
var person1: Person? = Person(name: "Alex") // viidete loendur = 1
var person2 = person1 // viidete loendur = 2
person1 = nil // viidete loendur = 1
person2 = nil // viidete loendur = 0, objekt vabastatakse
Kui on olemas tsüklilised viited (näiteks kaks objekti, mis viitavad üksteisele), ei suuda ARC automaatselt mälu vabastada. Selleks kasutatakse nõrku (weak) või mitteomandavaid (unowned) viiteid, mis ei suurenda loendurit.