Sobes.tech
Junior — Middle

Kādus soļus jāveic, lai atmiņā rastos noturēšanas cikls (Retain Cycle)?

sobes.tech AI

Atbilde no AI

iOS Retain Cycle (Noturēšanas cikls) rodas, kad divi vai vairāki objekti savstarpēji turas stipras atsauces, kas neļauj tiem brīvi atbrīvoties no atmiņas, izraisot noplūdi.

Lai notiktu noturēšanas cikls, ir nepieciešami šādi soļi:

  1. Objekts A satur stipru atsauci uz objektu B.
  2. Objekts B satur stipru atsauci uz objektu A.
  3. Neviens objekts netiek atbrīvots, jo atsauču skaitītājs nesasniedz nulli.

Piemērs:

class A {
    var b: B?
}

class B {
    var a: A?
}

let a = A()
let b = B()
a.b = b
b.a = a // Noturēšanas cikls

Lai izvairītos no cikla, viena no atsaucēm tiek padarīta vāja (weak) vai bez īpašnieka (unowned). Piemēram:

class B {
    weak var a: A?
}

Tādējādi, ja ir savstarpējas stipras atsauces bez pārtraukšanas, rodas noturēšanas cikls, kas bloķē objektu atbrīvošanu.