Junior — Middle
როგორ გამოვლინდეს მეხსიერებაში reten cycle-ები პროგრამების განვითარების დროს?
sobes.tech AI
პასუხი AI-სგან
Retain cycles (тотко калуу циклдары) эки же андан көп объект бири-бирине күчтүү шилтемелер аркылуу кайрылганда пайда болот, бул эс тутумдун бошотулушуна тоскоол болот, анткени объекттер керек болбосо дагы.
Мындай циклдерди iOSто аныктоо үчүн төмөнкү ыкмаларды колдонсо болот:
- Instruments куралы (Leaks жана Allocations): эс тутумдун агып кетишин көзөмөлдөөгө жана кайсы объекттер эс тутумда калганы көрсөтүүгө мүмкүндүк берет.
- Xcode Memory Graph Debugger: объекттерди жана алардын байланышын визуалдаштырып, сактоо циклдерин табууга жардам берет.
- Кодду талдоо күчтүү шилтемелерди колдонуу боюнча (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)
}
Ушул жол менен, сактоо циклдерин аныктоо профилирлөө куралдары жана кодду кылдат талдоо менен бириктирилет.