Junior — Middle
Milyen lépéseket kell megtenni a memória Retain Cycle (megtartási ciklus) kialakulásához?
sobes.tech MI
Válasz az MI-től
A Retain Cycle (Megőrzési ciklus) az iOS-ben akkor fordul elő, amikor két vagy több objektum kölcsönösen tartja egymást erős hivatkozásokkal, ami megakadályozza azok memória felszabadítását, és memória szivárgáshoz vezet.
A megőrzési ciklus kialakulásához a következő lépések szükségesek:
- Az A objektum erős hivatkozást tartalmaz a B objektumra.
- A B objektum erős hivatkozást tartalmaz az A objektumra.
- Egyik objektum sem szabadul fel, mivel a hivatkozás számláló nem ér el nullát.
Példa:
class A {
var b: B?
}
class B {
var a: A?
}
let a = A()
let b = B()
a.b = b
b.a = a // Megőrzési ciklus
A ciklus elkerülése érdekében az egyik hivatkozást gyengéddé (weak) vagy tulajdon nélküli (unowned) teszik. Például:
class B {
weak var a: A?
}
Így a megőrzési ciklus akkor alakul ki, amikor kölcsönösen erős hivatkozások vannak anélkül, hogy megszakítanánk őket, ami blokkolja az objektumok felszabadítását.