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.