Sobes.tech
Junior — Middle

Aké kroky je potrebné podniknúť, aby v pamäti vznikol cyklus udržiavania (Retain Cycle)?

sobes.tech AI

Odpoveď od AI

Cyklus udrži (Retain Cycle) v iOS nastáva, keď si dva alebo viac objektov navzájom držia silné odkazy, čo bráni ich uvoľneniu z pamäti a spôsobuje únik.

Pre vznik cyklu udrži je potrebné nasledovné:

  1. Objekt A obsahuje silnú referenciu na objekt B.
  2. Objekt B obsahuje silnú referenciu na objekt A.
  3. Žiadny z objektov nie je uvoľnený, pretože čítač odkazov nedosahuje nulu.

Príklad:

class A {
    var b: B?
}

class B {
    var a: A?
}

let a = A()
let b = B()
a.b = b
b.a = a // Cyklus udržiavania

Aby sa predišlo cyklu, jedna z referencií sa spraví slabou (weak) alebo bez vlastníka (unowned). Napríklad:

class B {
    weak var a: A?
}

Takto vzniká cyklus udržiavania, keď sú prítomné vzájomné silné odkazy bez prerušenia, čo blokuje uvoľnenie objektov.