Junior — Middle
Môže silná referencia v entite viesť k únikom pamäte?
sobes.tech AI
Odpoveď od AI
Áno, prítomnosť silných odkazov medzi objektmi v iOS môže viesť k únikom pamäte, najmä ak dôjde k cyklickému odkazu (retain cycle). To sa stáva, keď dva objekty navzájom udržiavajú silné odkazy, a systém ARC ich nemôže uvoľniť, pretože čítač odkazov oboch nedosahuje nulu.
Na prevenciu takýchto únikov sa používajú slabé (weak) alebo bezmajiteľské (unowned) odkazy, ktoré nezvyšujú čítač odkazov a umožňujú prerušiť cyklus.
Príklad cyklického odkazu:
class Person {
var apartment: Apartment?
}
class Apartment {
var tenant: Person?
}
let person = Person()
let apartment = Apartment()
person.apartment = apartment
apartment.tenant = person // tu vzniká retenčný cyklus
Na zabránenie úniku môže byť jeden z odkazov slabý:
class Apartment {
weak var tenant: Person?
}