Junior — Middle
Ako sa uvoľňuje pamäť pre objekty s cyklickými odkazmi v riadených prostrediach?
sobes.tech AI
Odpoveď od AI
V riadených prostrediach, ako je iOS s ARC (Automatické počítanie referencií), nedochádza k automatickému uvoľneniu pamäte pre objekty s cyklickými odkazmi, pretože ARC nedokáže prerušovať cykly odkazov.
Na vyriešenie tohto problému sa používajú slabé (weak) a bezvlastnícke (unowned) odkazy, ktoré nezvyšujú čítač odkazov objektu. To umožňuje prerušovať cykly a správne uvoľniť pamäť.
Príklad:
class Person {
var name: String
weak var apartment: Apartment? // slabý odkaz
init(name: String) {
self.name = name
}
}
class Apartment {
let unit: String
unowned let tenant: Person // bezvlastnícky odkaz
init(unit: String, tenant: Person) {
self.unit = unit
self.tenant = tenant
}
}
Tu sa Person a Apartment odkazujú navzájom, ale jeden z odkazov je slabý, čo zabraňuje únikom pamäti.
Ak cykly odkazov nebudú prerušované, objekty zostanú v pamäti aj bez externých odkazov, čo povedie k únikom pamäti.