Sobes.tech
Junior — Middle

Қадамҳои заруриро барои ба вуҷуд омадани давраи нигоҳдорӣ (Retain Cycle) дар хотира чӣ гуна бояд гузаронид?

sobes.tech AI

Ҷавоб аз AI

Дарвохи нигоҳдорӣ (Retain Cycle) дар iOS вақте рух медиҳад, ки ду ё бештар аз объектҳо ба воситаи истинодҳои қавӣ ба ҳамдигар нигоҳ медоранд, ки ин ба озод кардани онҳо аз ёддошт монеъ мешавад ва ба дарзмолӣ оварда мерасонад.

Барои пайдоиши дарвохи нигоҳдорӣ, қадамҳои зерин заруранд:

  1. Объект A дорои истиноди қавӣ ба объект B мебошад.
  2. Объект B дорои истиноди қавӣ ба объект A мебошад.
  3. Ҳеҷ яке аз объектҳо озод намешаванд, зеро ҳисобкунаки истинодҳо ба сифр намерасад.

Масалан:

class A {
    var b: B?
}

class B {
    var a: A?
}

ҳангоми:

let a = A()
let b = B()
a.b = b
b.a = a // Дарвохи нигоҳдорӣ

Барои пешгирӣ кардани дарвох, яке аз истинодҳо суст (weak) ё бе соҳиби (unowned) карда мешавад. Масалан:

class B {
    weak var a: A?
}

Ин гуна, вақте ки истинодҳои қавӣ ва мутақобил вуҷуд доранд, дарвохи нигоҳдорӣ ба вуҷуд меояд ва озод кардани объектҳо монеъ мешавад.