Junior — Middle
Podes dar um exemplo de quando, num closure em Swift, é necessário usar weak self para evitar ciclos de referência?
sobes.tech IA
Resposta da IA
Em Swift, um ciclo de referência ocorre quando um objeto captura uma referência a si mesmo numa closure, e essa closure é armazenada no mesmo objeto, levando a uma retenção mútua e a uma fuga de memória. Para evitar isso, usa-se weak self.
Exemplo: você tem uma classe ViewController que inicia uma operação assíncrona com uma closure. Se na closure usar self diretamente, então o ViewController será retido pela closure e não será liberado após ser fechado.
class ViewController: UIViewController {
func fetchData() {
networkRequest { [weak self] data in
guard let self = self else { return }
self.updateUI(with: data)
}
}
func updateUI(with data: Data) {
// atualização da interface
}
}
Aqui, weak self impede uma referência forte cíclica, pois a closure captura self de forma fraca e não retém o objeto, permitindo que ele seja liberado.