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.