Sobes.tech
Junior — Middle

Em que circunstâncias deve usar uma referência fraca (weak) dentro de um encerramento (closure)?

sobes.tech IA

Resposta da IA

As referências fracas (weak) dentro de closures em iOS são usadas para evitar ciclos de referências fortes (cycles de retenção), que podem levar a vazamentos de memória. Isso é geralmente relevante quando a closure captura um objeto (por exemplo, self) e é retida por esse objeto, criando uma referência forte mútua.

Use weak para fazer referência a self dentro da closure se a closure for armazenada como uma propriedade do objeto ou puder viver mais tempo do que a chamada da função, para evitar manter o objeto na memória após ele ser liberado.

Exemplo em Swift:

class ViewController {
    var completion: (() -> Void)?

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

    func doSomething() {
        print("Ação realizada")
    }
}

Aqui, [weak self] previne um ciclo forte entre ViewController e o closure completion.