Junior — Middle
Poți oferi un exemplu când, într-un closure în Swift, trebuie folosit weak self pentru a preveni referințe ciclice?
sobes.tech AI
Răspuns de la AI
În Swift, o referință ciclică apare atunci când un obiect capturează o referință la sine într-o închidere, iar această închidere este stocată în același obiect, ceea ce duce la menținerea reciprocă și la o scurgere de memorie. Pentru a evita acest lucru, se folosește weak self.
Exemplu: ai o clasă ViewController care pornește o operație asincronă cu o închidere. Dacă în închidere folosești self direct, atunci ViewController va fi menținut de închidere și nu va fi eliberat după închiderea sa.
class ViewController: UIViewController {
func fetchData() {
networkRequest { [weak self] data in
guard let self = self else { return }
self.updateUI(with: data)
}
}
func updateUI(with data: Data) {
// actualizarea interfeței
}
}
Aici, weak self previne o referință ciclică puternică, deoarece închiderea capturează self slab și nu menține obiectul, permițându-i să fie eliberat.