Sobes.tech
Junior — Middle

Можеш ли дати пример када у затварачу у Swift-у треба користити weak self да би се избегле цикличне референце?

sobes.tech АИ

Одговор од АИ

U Swift-u, ciklična referenca nastaje kada objekat uhvati sam sebe u zatvaranju, a to zatvaranje se čuva u istom objektu, što dovodi do međusobnog zadržavanja i curenja memorije. Da bi se to izbeglo, koristi se weak self.

Primer: imate klasu ViewController koja pokreće asinhronu operaciju sa zatvaranjem. Ako u zatvaranju direktno koristite self, ViewController će biti zadržan od strane zatvaranja i neće biti oslobođen nakon zatvaranja.

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) {
        // ažuriranje interfejsa
    }
}

Ovde, weak self sprečava snažnu cikličnu referencu, jer zatvaranje slabije uhvati self i ne zadržava objekat, omogućavajući mu da bude oslobođen.