Junior — Middle
Pode explicar o que significa usar uma referência fraca a self em closures?
sobes.tech IA
Resposta da IA
A utilização de uma referência fraca (weak reference) a self em closures no iOS (Swift) ajuda a evitar ciclos de retenção (retain cycles), que levam a fugas de memória. Quando um closure captura self como uma referência forte, e self contém esse closure, eles mantêm-se mutuamente, e a memória não é libertada.
Exemplo:
class MyClass {
var closure: (() -> Void)?
func setup() {
closure = { [weak self] in
guard let self = self else { return }
self.doSomething()
}
}
func doSomething() {
print("Action")
}
}
Aqui, [weak self] significa que dentro do closure, self será uma referência fraca, e se o objeto for destruído, a referência tornará nil, prevenindo a fuga de memória.