Junior — Middle
Чӣ гуна метавон циклҳои нигоҳдории (retain cycle) дар хотираро дар вақти таҳияи барномаҳо муайян кард?
sobes.tech AI
Ҷавоб аз AI
Циклҳои нигоҳдорӣ (retain cycles) вақте рух медиҳанд, ки ду ё бештар объектҳо ба ҳамдигар бо истинодҳои қавӣ муроҷиат мекунанд, ки ин ба он оварда мерасонад, ки хотира озод нашуда, ҳатто агар объектҳо дигар зарур набошанд.
Барои муайян кардани чунин циклҳо дар iOS, метавон истифода бурд:
- Асбоби Instruments (Leaks ва Allocations): имкон медиҳад, ки шикастҳои хотираро пайгирӣ кунед ва нишон диҳад, ки кадом объектҳо дар хотира боқӣ мемонанд.
- Дебаггери графи хотираи Xcode: объектҳо ва пайвандҳои онҳоро визуалӣ мекунад, кӯмак мекунад, ки циклҳои нигоҳдорӣ пайдо шаванд.
- Таҳлили код дар истифодаи истинодҳои қавӣ дар closure ва делегатҳо: аксар вақт, циклҳо аз сабаби истинодҳои қавӣ дар closure (
closure) ё делегатҳо пайдо мешаванд, ки бояд ҳамчунweakёunownedқайд карда шаванд.
Масалан:
class ViewController {
var closure: (() -> Void)?
func setup() {
closure = {
print(self) // нигоҳдории қавӣ ба self
}
}
}
Ин ҷо, ViewController нигоҳ медорад closure, ва closure нигоҳ медорад self — цикл ба вуҷуд меояд. Барои пешгирӣ, истифода мешавад [weak self]:
closure = { [weak self] in
guard let self = self else { return }
print(self)
}
Бинобар ин, муайян кардани циклҳои нигоҳдорӣ бо истифода аз асбобҳои профилировка ва таҳлили бодиққатии коди дар бораи истинодҳои қавӣ сурат мегирад.