Junior — Middle
Môžeš uviesť príklad, kedy je v uzávierke v Swift potrebné použiť weak self na prevenciu cyklických odkazov?
sobes.tech AI
Odpoveď od AI
V Swift-u, ciklična referenca nastaje kada objekt 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.