Sobes.tech
Junior — Middle

In quali circostanze si dovrebbe usare un riferimento debole (weak) all'interno di una chiusura (closure)?

sobes.tech AI

Risposta dell'AI

I riferimenti deboli (weak) all’interno delle closure in iOS vengono utilizzati per prevenire cicli di riferimenti forti (retain cycles), che possono portare a perdite di memoria. Questo è generalmente rilevante quando una closure cattura un oggetto (ad esempio, self) e viene trattenuta da quell’oggetto, creando un riferimento forte reciproco.

Usa weak per fare riferimento a self all’interno della closure se la closure viene memorizzata come proprietà dell’oggetto o può vivere più a lungo della chiamata alla funzione, per evitare di trattenere l’oggetto in memoria dopo che dovrebbe essere liberato.

Esempio in Swift:

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

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

    func doSomething() {
        print("Azione eseguita")
    }
}

Qui, [weak self] previene un ciclo forte tra ViewController e la closure completion.