Sobes.tech
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.