Sobes.tech
Junior — Middle

Какво е загуба на отделена памет и как може да възникне в приложение?

sobes.tech AI

Отговор от AI

Загуба на памет (memory leak) в iOS приложение е ситуация, при която приложението продължава да държи препратки към обекти, които вече не са необходими, поради което паметта не се освобождава и с времето се изразходват все повече ресурси.

Причини:

  • Циклични препратки (retain cycles) между обекти, особено при използване на ARC (Автоматично преброяване на препратките).
  • Използване на closures с улавяне на self без слаби препратки (weak/self).
  • Неправилно управление на ресурсите, например, непускане на делегати.

Пример за retain cycle с closure:

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

    func setup() {
        closure = {
            print(self) // улавяне на self без weak
        }
    }
}

За да се избегне, трябва да се използва [weak self]:

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

Редовният анализ с помощта на инструментите на Xcode (Instruments — Leaks) помага за откриване и отстраняване на течове на памет.