Sobes.tech
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.