Чӣ тавр гардиши нигоҳдории истинодҳо дар забонҳои барномасозии идорашаванда бо ёрии хотира оғоз меёбад?
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? // истиноди суст барои пешгирӣ кардани цикл
}
Бинобар ин, давраи нигоҳдорӣ тавассути истинодҳои қавӣ байниҳам оғоз мешавад ва бо истифода аз истинодҳои суст ё беҳуқуқ барои қатъ кардани цикл, пешгирӣ мешавад.