Junior — Middle
Ar galite paaiškinti, ką reiškia naudoti silpną nuorodą į self uždarymuose?
sobes.tech AI
Atsakymas iš AI
iOS (Swift) uždarymuose (closures) naudoti silpną nuorodą (weak reference) į self padeda išvengti išlaikymo ciklų (retain cycles), kurie sukelia atminties nutekėjimą. Kai uždarymas įsikimba į self kaip stiprią nuorodą, ir self turi tą uždarymą, jie vienas kitą laiko, ir atmintis nebus laisvinta.
Pavyzdys:
class MyClass {
var closure: (() -> Void)?
func setup() {
closure = { [weak self] in
guard let self = self else { return }
self.doSomething()
}
}
func doSomething() {
print("Action")
}
}
Čia [weak self] reiškia, kad uždarymo viduje self bus silpna nuoroda, ir jei objektas bus sunaikintas, nuoroda taps nil, taip išvengiant atminties nutekėjimo.