Sobes.tech
Junior — Middle

Milliseid samme tuleb astuda, et mäluhoos tekiks hoidmisring (Retain Cycle)?

sobes.tech AI

Vastus AI-lt

iOS-s toimuv Retain Cycle (hoidmis tsükkel) tekib, kui kaks või enam objekti hoiavad üksteist tugeva viitega, mis takistab nende vabastamist mälust, põhjustades mälulekke.

Retain Cycle'i tekkimiseks on vajalikud järgmised sammud:

  1. Objekt A sisaldab tugevat viidet objekti B-le.
  2. Objekt B sisaldab tugevat viidet objekti A-le.
  3. Ükski objekt ei vabastata, kuna viidete loendur ei jõua nulli.

Näide:

class A {
    var b: B?
}

class B {
    var a: A?
}

let a = A()
let b = B()
a.b = b
b.a = a // Hoiukeele tsükkel

Tsükli vältimiseks tehakse üks viidetest nõrk (weak) või omandamata (unowned). Näiteks:

class B {
    weak var a: A?
}

Nii tekib hoiukeele tsükkel, kui on olemas vastastikused tugevad viited ilma katkestuseta, mis takistab objektide vabastamist.