Sobes.tech
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?
}