Middle
Kaip vykdomas atminties valdymas Swift'e referenciniams tipams?
sobes.tech AI
Atsakymas iš AI
Swift kalba atlieka atminties valdymą referencinių tipų (klasių) automatinio nuorodų skaičiavimo (ARC, Automatic Reference Counting) būdu. Kiekvienas objektas krūvoje saugo nuorodų skaitiklį: aktyvių nuorodų skaičių į tą objektą. Kai sukuriama nauja nuoroda į objektą, skaitiklis didėja, ir kai nuoroda nebenaudojama, mažėja. Kai skaitiklis pasiekia nulį, objektas automatiškai pašalinamas iš atminties.
Pavyzdys:
class Person {
var name: String
init(name: String) {
self.name = name
}
}
var a: Person? = Person(name: "Alice") // skaitiklis = 1
var b = a // skaitiklis = 2
b = nil // skaitiklis = 1
a = nil // skaitiklis = 0, objektas pašalinamas
Svarbu išvengti ciklinių nuorodų (retain cycles), kai du objektai vienas kitą nuorodoja, kas trukdo laisvinti atmintį. Tam naudojamos silpnos (weak) ir be savininko (unowned) nuorodos.
Vertės tipai (struktūros, išvardijimai) saugomi steke ir kopijuojami priskyrimo metu, todėl ARC jų neveikia.