Junior — Middle
Ako sa uvoľňuje pamäť, ktorá je obsadená objektom v programe?
sobes.tech AI
Odpoveď od AI
V iOS-och je uvoľňovanie pamäte hlavne automatické vďaka systému ARC (Automatic Reference Counting). Každý objekt má čítač odkazov, ktorý sa zvyšuje pri vytváraní novej silnej referencie a znižuje pri jej odstránení. Keď čítač dosiahne nulu, objekt sa automaticky zničí a pamäť je uvoľnená.
Ak v kóde vzniknú cyklické odkazy (napríklad dva objekty so silnými odkazmi na seba navzájom), pamäť sa neuvoľní. Tento problém riešime pomocou slabých (weak) alebo bezvlastníckych (unowned) odkazov.
Príklad:
class Person {
var meno: String
weak var apartment: Apartment? // slabý odkaz, aby sa predišlo cyklu
init(meno: String) {
self.meno = meno
}
}
class Apartment {
let jednotka: String
unowned let tenant: Person // bezvlastnícky odkaz
init(jednotka: String, tenant: Person) {
self.jednotka = jednotka
self.tenant = tenant
}
}
Týmto spôsobom dochádza k automatickému uvoľneniu pamäti, ak sú odkazy správne spravované.