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.