Middle
Kuidas toimub mälu haldamine Swiftis viidetüüpide jaoks?
sobes.tech AI
Vastus AI-lt
Swiftis toimub mäluhaldus viidetüüpi (klasside) jaoks automaatse viidete arvutamise (ARC, Automatic Reference Counting) abil. Iga objekt mälujärjekorras hoiab viidete loendurit: aktiivsete viidete arvu sellele objektile. Kui luuakse uus viide objekti juurde, suureneb loendur, ja kui viide lõpetab kasutamise, väheneb see. Kui loendur jõuab nulli, eemaldatakse objekt automaatselt mälust.
Näide:
class Person {
var name: String
init(name: String) {
self.name = name
}
}
var a: Person? = Person(name: "Alice") // loendur = 1
var b = a // loendur = 2
b = nil // loendur = 1
a = nil // loendur = 0, objekt eemaldatakse
Oluline on vältida tsüklilisi viiteid (retain cycles), kus kaks objekti viitavad üksteisele, mis takistab mälu vabastamist. Selleks kasutatakse nõrku (weak) ja omandamata (unowned) viiteid.
Väärtusetüübid (struktuurid, enumeratsioonid) salvestatakse virnale ja kopeeritakse määramisel, seega ARC nendele ei kehti.