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.