Sobes.tech
Junior — Middle

Como e em que casos usam referências fracas dentro de closures?

sobes.tech IA

Resposta da IA

No iOS, ao trabalhar com closures, muitas vezes surge o problema de referências cíclicas, quando um objeto captura o closure e o closure captura o objeto, levando a fugas de memória. Para evitar isso, usam-se referências fracas (weak references) dentro dos closures.

Uma referência fraca não aumenta o contador de referências do objeto, portanto, se não houver referências fortes, o objeto pode ser libertado.

Exemplo de uso de uma referência fraca dentro de um closure:

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

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

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

Casos de uso:

  • Quando o closure captura self ou outros objetos para evitar ciclos de retenção.
  • Em operações assíncronas, onde o objeto pode ser destruído antes da execução do closure.

O uso de referências fracas ajuda a gerenciar a memória e prevenir fugas.