Fiche 15.02
Fiche 15.02 — Memory Graph, leaks et retain cycles
Objectif
Comprendre les fuites mémoire et savoir utiliser Memory Graph Debugger pour détecter un retain cycle.
En iOS, un bug mémoire peut empêcher un écran, un ViewModel ou un service d’être libéré.
1. L’idée à comprendre
Swift utilise ARC : Automatic Reference Counting.
Un objet est gardé en mémoire tant qu’il est référencé par au moins un autre objet.
Un retain cycle arrive quand deux objets se gardent mutuellement en mémoire.
Texte
2. Exemple de retain cycle avec closure
Swift
Correction :
Swift
[weak self] évite que la closure garde fortement le ViewModel.
3. Retain cycle avec Combine
Swift
Correction :
Swift
Combine + sink + self est un cas classique.
4. Delegate weak
En UIKit, les delegates doivent souvent être weak.
Swift
Sans weak, le service peut garder le delegate en mémoire trop longtemps.
5. Memory Graph Debugger
Dans Xcode :
Texte
À vérifier :
- un ViewModel existe encore après fermeture de l’écran ;
- un ViewController UIKit reste en mémoire ;
- une closure garde
self; - un delegate n’est pas
weak.
6. Méthode simple
Texte
Résumé
- ARC libère les objets quand ils ne sont plus référencés.
- Un retain cycle empêche la libération.
- Les closures doivent souvent capturer
selfavec[weak self]. - Les delegates UIKit doivent souvent être
weak. - Memory Graph Debugger permet de voir qui retient un objet.