Sobes.tech
Junior — Middle

În ce circumstanțe trebuie să folosiți o referință slabă (weak) în interiorul unei închideri (closure)?

sobes.tech AI

Răspuns de la AI

Referințele slabe (weak) din interiorul închiderilor în iOS sunt utilizate pentru a preveni ciclurile de referințe puternice (retain cycles), care pot duce la scurgeri de memorie. Acest lucru este de obicei relevant atunci când o închidere capturează un obiect (de exemplu, self) și este păstrată de acel obiect, creând o referință puternică reciprocă.

Utilizați weak pentru a face referire la self în interiorul închiderii dacă închiderea este stocată ca o proprietate a obiectului sau poate trăi mai mult decât apelul funcției, pentru a evita menținerea obiectului în memorie după ce acesta trebuie eliberat.

Exemplu în Swift:

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

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

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

Aici, [weak self] previne un ciclu puternic între ViewController și închiderea completion.