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.