Sobes.tech
Junior — Middle

De ce este recomandat să folosiți o referință slabă către sine (weak self) în codul care utilizează closures?

sobes.tech AI

Răspuns de la AI

Utilizarea referințelor slabe (weak self) în closures este necesară pentru a preveni ciclurile de referință puternice (retention cycles), care duc la scurgeri de memorie.

Când o closure capturează self ca referință slabă, iar self conține acea closure (de exemplu, într-o proprietate), ele se mențin reciproc, și nici unul dintre obiecte nu este eliberat.

Exemplu de utilizare a unei referințe slabe:

someAsyncCall { [weak self] in
    guard let self = self else { return }
    self.doSomething()
}

Aici, self este capturat slab, astfel încât dacă obiectul self este distrus înainte de executarea closure-ului, acesta nu îl va menține în memorie, prevenind o scurgere.