Sobes.tech
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)
}

Ушул жол менен, сактоо циклдерин аныктоо профилирлөө куралдары жана кодду кылдат талдоо менен бириктирилет.