Sobes.tech
Junior — Middle

Je možné, že vzniknú cyklické odkazy, ktoré bránia zberu odpadu v automatickom správci pamäte?

sobes.tech AI

Odpoveď od AI

Áno, na iOS môže pri použití automatického riadenia pamäte (ARC) dôjsť k vytvoreniu cyklických odkazov (retain cycles). To sa stáva, keď si dva alebo viac objektov navzájom drží silné odkazy, čo bráni tomu, aby sa čítač odkazov znížil na nulu a objekty boli uvoľnené.

Na prevenciu týchto situácií sa používajú slabé (weak) alebo bezvlastnícke (unowned) odkazy. Napríklad, delegáti sa zvyčajne deklarujú ako weak, aby sa predišlo cyklom.

Príklad:

class Person {
    var apartment: Apartment?
}

class Apartment {
    weak var tenant: Person?  // slabý odkaz zabraňuje cyklu
}

let john = Person()
let unit4A = Apartment()
john.apartment = unit4A
unit4A.tenant = john

V tomto príklade je tenant slabý odkaz, takže cyklus nevznikne a objekty budú správne uvoľnené garbage collectorem.