Middle — Middle+
Ako sa inicializuje cyklus udržiavania odkazov v jazykoch s riadenou pamäťou?
sobes.tech AI
Odpoveď od AI
V jazykoch s automatickou správou pamäti, ako je Swift alebo Objective-C na iOS, vzniká cyklus udržiavania (retain cycle), keď si dva alebo viac objektov navzájom drží silné odkazy, čo bráni zberaču odpadu alebo ARC (Automatické počítanie odkazov) uvoľniť tieto objekty.
Cyklus udržiavania začína, keď napríklad objekt A obsahuje silnú referenciu na objekt B, a objekt B má na oplátku silnú referenciu na objekt A. To spôsobí, že počítadlá odkazov oboch objektov nikdy nedosiahnu nulu.
Na prevenciu takýchto cyklov sa používajú:
- Slabé odkazy (
weak) — nezvyšujú počítadlo odkazov a sú automaticky nastavené na nil pri odstránení objektu. - Nepodielajúce odkazy (
unowned) — nezvyšujú počítadlo, ale nie sú automaticky nastavené na nil, a používajú sa, keď je zaručené, že objekt bude existovať dlhšie.
Príklad:
class Person {
var apartment: Apartment?
}
class Apartment {
weak var tenant: Person? // slabý odkaz na zabránenie cyklu
}
Takto je cyklus udržiavania iniciovaný vzájomnými silnými odkazmi, a je zabránené jeho vzniku použitím slabých alebo nepatriacich odkazov na prerušenie cyklu.