Junior — Middle
Kaip išlaisvinama atmintis, užimta objekto programoje?
sobes.tech AI
Atsakymas iš AI
iOS pagrindinis atminties išlaisvinimas vyksta automatiškai dėka ARC (Automatic Reference Counting) sistemos. Kiekvienas objektas turi nuorodų skaitiklį, kuris didėja kuriant naują stiprią nuorodą ir mažėja ją pašalinus. Kai skaitiklis pasiekia nulį, objektas automatiškai sunaikinamas ir atlaisvinama atmintis.
Jei kode atsiranda ciklinės nuorodos (pavyzdžiui, du objektai su stipriomis nuorodomis vienas į kitą), atmintis nebus atlaisvinta. Šią problemą sprendžia silpnos (weak) arba be savininko (unowned) nuorodos.
Pavyzdys:
class Person {
var name: String
weak var apartment: Apartment? // silpna nuoroda, siekiant išvengti ciklo
init(name: String) {
self.name = name
}
}
class Apartment {
let unit: String
unowned let tenant: Person // be savininko nuoroda
init(unit: String, tenant: Person) {
self.unit = unit
self.tenant = tenant
}
}
Taip, jei nuorodos yra tinkamai valdomos, atmintis automatiškai bus atlaisvinta.