Sobes.tech
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:

  1. Az A objektum erős hivatkozást tartalmaz a B objektumra.
  2. A B objektum erős hivatkozást tartalmaz az A objektumra.
  3. 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.