Junior — Middle
Hogyan lehet megszüntetni a ciklikus hivatkozásokat a memória kezelésében, hogy elkerüljük a szivárgásokat?
sobes.tech MI
Válasz az MI-től
A ciklikus hivatkozások akkor fordulnak elő, amikor két vagy több objektum egymásra hivatkozik, ami megakadályozza az automatikus memóriafelszabadítást, különösen referencia-számlálás használata esetén.
Az iOS-en (Objective-C/Swift) a ciklikus hivatkozások miatti memória szivárgások megelőzése érdekében a következőket alkalmazzák:
- Gyenge hivatkozások (
weak) — nem növelik a hivatkozásszámot, automatikusan nil-re állnak az objektum törlésekor. - Nem tulajdonolt hivatkozások (
unowned) — nem növelik a számlálót, de nem állítják nil-re, akkor használják, amikor az objektum garantáltan létezik.
Például Swift-ben:
class A {
var b: B?
}
class B {
weak var a: A? // gyenge hivatkozás a ciklus elkerülése érdekében
}
A weak vagy unowned használata megszakítja a ciklust, lehetővé téve az ARC számára, hogy helyesen felszabadítsa az objektumokat, és elkerülje a memória szivárgásokat.