Kako se oslobađa memorija kod objekata kreiranih pomoću referentnog tipa?
sobes.tech АИ
Одговор од АИ
U iOS-u, objekti kreirani pomoću referentnih tipova (npr. klase u Swift ili Objective-C) upravljaju se sistemom automatskog brojanja referenci (ARC — Automatic Reference Counting). Svaki objekat održava brojač referenci — broj aktivnih referenci na njega. Kada se kreira nova referenca na objekat, brojač se povećava, a kada referenca prestane da se koristi (npr. promenljiva izađe iz opsega ili joj se dodeli nil), brojač se smanjuje.
Kada brojač referenci objekta dostigne nulu, to znači da na njega više niko ne ukazuje, i memorija koju objekat zauzima automatski se oslobađa. Ovo pomaže u izbegavanju curenja memorije bez potrebe za ručnim upravljanjem.
Primer u Swift-u:
class Person {
var name: String
init(name: String) {
self.name = name
}
deinit {
print("Osoba \(name) je oslobođena")
}
}
var p1: Person? = Person(name: "Ivan")
var p2 = p1 // brojač referenci je povećan
p1 = nil // brojač je smanjen, ali objekat još postoji
p2 = nil // brojač je 0, objekat je oslobođen
Važno je izbegavati ciklične reference (retain cycles), kada dva objekta međusobno ukazuju jedan na drugi, što sprečava oslobađanje memorije. Za to se koriste weak ili unowned reference.