Sobes.tech
Junior — Middle

Ajratilgan xotira yo'qotilishi nima va u qanday qilib ilovada yuzaga kelishi mumkin?

sobes.tech AI

AIdan javob

iOS ilovasida xotira oqishi (memory leak) — bu ilova endi kerak bo‘lmagan ob’ektlarga havolalarni saqlab qolishda davom etadigan holat bo‘lib, bu xotira bo‘shatilmasligiga va vaqt o'tishi bilan ko‘proq resurslar sarflanishiga olib keladi.

Sabablari:

  • Ob’ektlar o‘rtasida tsiklik havolalar (retain cycles), ayniqsa ARC (Avtomatik Referenslar Hisobi) ishlatilganda.
  • self ni yutib olgan yopilishlar (closures) va zaif havolalar (weak/self) bo‘lmagan holda.
  • Resurslarni noto‘g‘ri boshqarish, masalan, delegatlarni bo‘shatmaslik.

Yopilish bilan retain cycle misoli:

class ViewController {
    var closure: (() -> Void)?

    func setup() {
        closure = {
            print(self) // weak bo‘lmagan holda self ni yutib olish
        }
    }
}

Buning oldini olish uchun [weak self] dan foydalanish kerak:

closure = { [weak self] in
    guard let self = self else { return }
    print(self)
}

Xcode asboblari yordamida (Instruments — Leaks) muntazam tahlil qilish xotira oqishini aniqlash va bartaraf etishga yordam beradi.