Kako se upravlja memorija za referentne tipove u Swift-u?
sobes.tech АИ
Одговор од АИ
U Swift-u, upravljanje memorijom za referentne tipove (klase) vrši se pomoću automatskog brojanja referenci (ARC, Automatic Reference Counting). Svaki objekat na hrpi održava brojač referenci: broj aktivnih referenci na taj objekat. Kada se kreira nova referenca na objekat, brojač se povećava, a kada referenca prestane da se koristi, smanjuje. Kada brojač dostigne nulu, objekat se automatski briše iz memorije.
Primer:
class Person {
var name: String
init(name: String) {
self.name = name
}
}
var a: Person? = Person(name: "Alice") // brojač = 1
var b = a // brojač = 2
b = nil // brojač = 1
a = nil // brojač = 0, objekat se briše
Važno je izbegavati ciklične reference (retain cycles), kada dva objekta međusobno referenciraju, što sprečava oslobađanje memorije. Za to se koriste slabe (weak) i bezvlasničke (unowned) reference.
Tipovi vrednosti (strukture, enumeracije) se čuvaju na steku i kopiraju pri dodeljivanju, pa ARC na njih ne važi.