Junior — Middle
Kas saaks anda näite, millal Swiftis sulgemises on vaja kasutada weak self, et vältida tsüklilisi viiteid?
sobes.tech AI
Vastus AI-lt
Swiftis tekib tsükliline viide, kui objekt haarab end ise sulgemise kaudu, ja see sulgemine salvestatakse samasse objekti, mis viib vastastikuse hoidmise ja mälulekke tekkimiseni. Selle vältimiseks kasutatakse weak self.
Näide: teil on klass ViewController, mis alustab asünkroonset operatsiooni sulgemisega. Kui sulgemises kasutatakse otse self, siis ViewController hoitakse kinni sulgemise poolt ja see ei vabastata pärast sulgemist.
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) {
// kasutajaliidese uuendamine
}
}
Siin takistab weak self tugeva tsüklilise viite tekkimist, kuna sulgemine haarab self nõrgalt ja ei hoia objekti kinni, võimaldades selle vabastamist.