Sobes.tech
Junior — Middle

Ce este pierderea de memorie alocată și cum poate apărea într-o aplicație?

sobes.tech AI

Răspuns de la AI

Pierdere de memorie (memory leak) într-o aplicație iOS este o situație în care aplicația continuă să păstreze referințe la obiecte care nu mai sunt necesare, ceea ce împiedică eliberarea memoriei și, în timp, consumă tot mai multe resurse.

Cauze:

  • Cicluri de referințe (retain cycles) între obiecte, mai ales când se folosește ARC (Contorizare automată a referințelor).
  • Utilizarea de closures cu captură de self fără referințe slabe (weak/self).
  • Gestionarea incorectă a resurselor, de exemplu, neeliberarea delegaților.

Exemplu de ciclu de retenție cu closure:

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

    func setup() {
        closure = {
            print(self) // captură de self fără weak
        }
    }
}

Pentru a evita, trebuie folosit [weak self]:

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

Analiza regulată cu instrumentele Xcode (Instruments — Leaks) ajută la identificarea și eliminarea scurgerilor de memorie.