Junior — Middle
Ar galite pateikti pavyzdį, kada Swift uždarymo (closure) viduje reikia naudoti weak self, kad išvengtumėte ciklinių nuorodų?
sobes.tech AI
Atsakymas iš AI
Swift'e ciklinė nuoroda atsiranda, kai objektas įsikabina į save patį užrakto funkcijoje, ir ši užrakto funkcija yra saugoma tame pačiame objekte, kas sukelia tarpusavio išlaikymą ir atminties nutekėjimą. Norint to išvengti, naudojamas weak self.
Pavyzdys: turite klasę ViewController, kuri pradeda asinchroninę operaciją su užraktu. Jei užrake tiesiogiai naudojate self, tada ViewController bus išlaikomas užrako ir nebus atlaisvintas po uždarymo.
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) {
// atnaujinti sąsają
}
}
Čia weak self išvengia stiprios ciklinės nuorodos, nes užrake silpnai įsikabina į self ir nelaiko objekto, leidžiant jam būti atlaisvintam.