Sobes.tech
Junior — Middle

Cum și în ce cazuri se folosesc referințe slabe în interiorul închiderilor?

sobes.tech AI

Răspuns de la AI

În iOS, atunci când lucrați cu closures, apare adesea problema referințelor ciclice, când un obiect capturează closure-ul și closure-ul capturează obiectul, ceea ce duce la scurgeri de memorie. Pentru a evita acest lucru, se folosesc referințe slabe (weak references) în interiorul closures.

O referință slabă nu crește contorul de referințe al obiectului, astfel încât, în absența referințelor puternice, obiectul poate fi eliberat.

Exemplu de utilizare a unei referințe slabe în interiorul unui closure:

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

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

    func doSomething() {
        print("Acțiune realizată")
    }
}

Cazuri de utilizare:

  • Când closure-ul capturează self sau alte obiecte pentru a evita ciclurile de retenție.
  • În operațiuni asincrone, unde obiectul poate fi distrus înainte de executarea closure-ului.

Utilizarea referințelor slabe ajută la gestionarea memoriei și prevenirea scurgerilor.