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