Sobes.tech
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.