Sobes.tech
Junior — Middle

Por que é recomendado usar uma referência fraca a si mesmo (weak self) no código que utiliza closures?

sobes.tech IA

Resposta da IA

A utilização de referências fracas (weak self) em closures é necessária para evitar ciclos de referências fortes ( ciclos de retenção), que levam a vazamentos de memória.

Quando um closure captura self como uma referência forte, e self contém esse closure (por exemplo, numa propriedade), eles mantêm-se mutuamente, e nenhum dos objetos é libertado.

Exemplo de uso de uma referência fraca:

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

Aqui, self é capturado fracamente, portanto, se o objeto self for destruído antes da execução do closure, este não o manterá na memória, prevenindo assim uma fuga.