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.