Sobes.tech
Middle — Middle+

Чӣ тавр гардиши нигоҳдории истинодҳо дар забонҳои барномасозии идорашаванда бо ёрии хотира оғоз меёбад?

sobes.tech AI

Ҷавоб аз AI

Дар забонҳои барномасозӣ бо идоракунии худкории хотира, монанди Swift ё Objective-C дар iOS, давраи нигоҳдорӣ (retain cycle) ҳангоми пайдо мешавад, ки вақте ду ё бештар аз як объект бо истифода аз истинодҳои қавӣ якдигарро нигоҳ медоранд, ки ин ба ҷамъоварии партов ё ARC (Ҳисоби автоматии истинодҳо) имкон намедиҳад, ки ин объектҳоро озод кунад.

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

Барои пешгирӣ кардани чунин циклҳо, истифода мешаванд:

  • Истинодҳои суст (weak) — ҳисобкунаки истинодҳоро зиёд намекунанд ва автоматӣ ба nil тағйир дода мешаванд вақте, ки объект хориҷ карда мешавад.
  • Истинодҳои беҳуқуқ (unowned) — ҳисобкунаки онҳоро зиёд намекунанд, аммо автоматӣ ба nil тағйир намеёбанд, ва вақте, ки объект муддати дарозтар вуҷуд дорад, истифода мешаванд.

Масалан:

class Person {
    var apartment: Apartment?
}

class Apartment {
    weak var tenant: Person?  // истиноди суст барои пешгирӣ кардани цикл
}

Бинобар ин, давраи нигоҳдорӣ тавассути истинодҳои қавӣ байниҳам оғоз мешавад ва бо истифода аз истинодҳои суст ё беҳуқуқ барои қатъ кардани цикл, пешгирӣ мешавад.