Sobes.tech
Junior — Middle

Kokiose aplinkybėse turėtumėte naudoti silpną (weak) nuorodą uždarymo (closure) viduje?

sobes.tech AI

Atsakymas iš AI

Silpnos nuorodos (weak) uždarymuose iOS naudojamos siekiant išvengti stiprių nuorodų ciklų (retain cycles), kurie gali sukelti atminties nutekėjimą. Paprastai tai yra svarbu, kai uždarymas įsikabina į objektą (pvz., self) ir yra išlaikomas šio objekto, sukuriant abipusį stiprų ryšį.

Naudokite weak, kad nuoroda į self būtų viduje uždarymo, jei uždarymas saugomas kaip objekto savybė arba gali gyventi ilgiau nei funkcijos kvietimas, siekiant išvengti objekto laikymo atmintyje po jo paleidimo.

Swift pavyzdys:

class ViewController {
    var completion: (() -> Void)?

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

    func doSomething() {
        print("Veiksmas atliktas")
    }
}

Čia [weak self] išvengia stipraus ciklo tarp ViewController ir uždarymo completion.