Sobes.tech
Junior — Middle

Kodėl rekomenduojama naudoti silpną nuorodą į save (weak self) uždarymų naudojimo kode?

sobes.tech AI

Atsakymas iš AI

Naudojant silpną nuorodą (weak self) uždarymuose yra būtina siekiant išvengti stiprių nuorodų ciklų (retain cycles), kurie sukelia atminties nutekėjimą.

Kai uždarymas įrašo self kaip silpną nuorodą, o self turi tą uždarymą (pavyzdžiui, savybėje), jie vienas kitą laiko, ir nė vienas objektas nėra paleidžiamas.

Silpnos nuorodos pavyzdys:

someAsyncCall { [weak self] in
    guard let self = self else { return }
    self.doSomething()
}

Čia self yra įrašytas silpnai, todėl jei self objektas bus sunaikintas prieš uždarymo vykdymą, jis jo neužlaikys atmintyje, kas užkerta kelią nutekėjimui.