Junior — Middle
Peux-tu donner un exemple où dans une closure en Swift, il faut utiliser weak self pour éviter les références cycliques?
sobes.tech IA
Réponse de l'IA
En Swift, une référence cyclique se produit lorsqu’un objet capture une référence à lui-même dans une fermeture, et cette fermeture est stockée dans le même objet, ce qui entraîne une rétention mutuelle et une fuite de mémoire. Pour éviter cela, on utilise weak self.
Exemple : vous avez une classe ViewController qui lance une opération asynchrone avec une fermeture. Si dans la fermeture vous utilisez self directement, alors ViewController sera retenu par la fermeture et ne sera pas libéré après sa fermeture.
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) {
// mise à jour de l’interface
}
}
Ici, weak self empêche une référence forte cyclique, car la fermeture capture self faiblement et ne retient pas l’objet, ce qui permet de le libérer.