Junior — Middle
Může silná reference v entitě vést k únikům paměti?
sobes.tech AI
Odpověď od AI
Ano, přítomnost silných odkazů mezi objekty v iOS může vést k únikům paměti, zejména pokud dojde k cyklickému odkazu (retention cycle). To se stává, když dva objekty navzájem udržují silné odkazy, a systém ARC je nemůže uvolnit, protože čítač odkazů obou nedosahuje nuly.
Aby se takovým únikům zabránilo, používají se slabé (weak) nebo bezmajitelové (unowned) odkazy, které nezvyšují čítač odkazů a umožňují přerušit cyklus.
Pří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 // zde vzniká retenční cyklus
Aby se zabránilo úniku, může být jeden z odkazů slabý:
class Apartment {
weak var tenant: Person?
}