Sobes.tech
Junior — Middle

Puoi spiegare cosa significa usare un riferimento debole a self nelle chiusure?

sobes.tech AI

Risposta dell'AI

L'uso di un riferimento debole (weak reference) a self nei closure in iOS (Swift) aiuta a evitare cicli di ritenzione (retain cycles), che portano a perdite di memoria. Quando un closure cattura self come riferimento forte, e self contiene quel closure, si tengono reciprocamente, e la memoria non viene liberata.

Esempio:

class MyClass {
    var closure: (() -> Void)?

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

    func doSomething() {
        print("Action")
    }
}

Qui, [weak self] significa che all'interno del closure, self sarà una referenza debole, e se l'oggetto viene distrutto, il riferimento diventerà nil, prevenendo perdite di memoria.