Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon L'outil de graphique de mémoire peut-il aider à identifier les cycles de conservation dans les applications MVVMCross


L'outil de graphique de mémoire peut-il aider à identifier les cycles de conservation dans les applications MVVMCross


Oui, l'outil de graphique de mémoire dans Xcode peut aider à identifier les cycles de conservation dans les applications MVVMCross. Voici comment cela fonctionne et comment il peut être appliqué à MVVMCross:

Comprendre les cycles de conservation

Les cycles de conservation se produisent lorsque deux objets ou plus se sont contenus de fortes références les uns aux autres, ce qui les empêche d'être traités de mémoire. Il s'agit d'un problème courant dans le développement iOS, en particulier lorsque vous utilisez des délégués ou des fermetures qui capturent fortement les objets.

à l'aide de l'outil de graphique de mémoire

1. Exécuter l'application et prendre des instantanés: Pour utiliser l'outil de graphique de mémoire, exécutez votre application MVVMCross dans Xcode et naviguez dans ses flux centraux. Prenez des instantanés de mémoire à différents moments, en particulier après la navigation des vues ou des modèles de vue qui devraient être traités.

2. Analyse des instantanés: Dans le débogueur de graphe de mémoire, le panneau de gauche affiche tous les objets actuellement en mémoire, ainsi que leurs comptes d'instance. Recherchez des objets qui auraient dû être traités mais qui sont toujours présents. Une augmentation du nombre d'instances d'une classe au fil du temps peut indiquer un cycle de conservation.

3. Identification des cycles de conservation: sélectionnez un objet dans le panneau de gauche pour afficher son graphique d'objet. Le graphique montre les références qui gardent l'objet en mémoire. Les lignes en gras indiquent des références fortes, tandis que les lignes gris clair indiquent des références inconnues (qui pourraient être faibles ou fortes). Si vous voyez une boucle où les objets se référent fortement, c'est probablement un cycle de conservation.

4. Fixation des cycles de conservation: une fois que vous avez identifié un cycle de conservation, passez en revue votre code pour trouver où les références fortes sont créées. Souvent, cela implique de changer de référence forte aux références faibles, en particulier dans les délégués ou les fermetures.

s'application sur mvvmcross

Dans les applications MVVMCross, les modèles de vue sont étroitement couplés au cycle de vie des vues. Cela peut parfois conduire à conserver les cycles s'il n'est pas géré correctement. Par exemple, si un modèle de vue contient une forte référence à une vue et que la vue contient également une forte référence au modèle de vue (peut-être via une liaison), un cycle de conservation peut se produire.

Pour éviter cela dans MVVMCROSS, assurez-vous que les références des vues aux modèles sont faibles. Utilisez des méthodes de cycle de vie fournies par MVVMCross (comme «disparu») pour nettoyer toutes les références solides lorsque les vues sont rejetées. De plus, utilisez l'outil de graphique de mémoire pour vérifier que les modèles de vue sont correctement traités lorsque leurs vues associées sont supprimées de la pile de navigation.

Exemple d'identification des cycles de conservation dans mvvmcross

Supposons que vous ayez un «MyViewModel» qui est lié à un «MyView». Si `MyView` détient une forte référence à« MyViewModel », et que« MyViewModel »détient également une forte référence à« MyView »(peut-être via un délégué ou une fermeture), vous verriez les deux objets rester en mémoire même après avoir navigué de« MyView ». À l'aide de l'outil de graphique de mémoire, vous identifieriez ce cycle, puis modifiez votre code pour utiliser des références faibles si nécessaire.

En suivant ces étapes et en utilisant l'outil de graphique de mémoire, vous pouvez identifier et résoudre efficacement les cycles de conservation dans les applications MVVMCross, en vous assurant que l'utilisation de la mémoire de votre application reste efficace et stable.

Citations:
[1] https://doordash.engineering/2019/05/22/ios-memory-leaks-and-retain-cycle-dection-using-xcodes-memory-graph-debugger/
[2] https://careersatdoordash.com/blog/ios-memory-leaks-and-renain-cycle-dection-using-xcodes-memory-graph-debugger/
[3] https://www.tothenew.com/blog/memory-leak-with-memory-graph-debugger/
[4] https://paul-samuels.com/blog/2018/11/20/Unit-Testing-retain-cycles/
[5] https://www.mvvmcross.com/mvvmcross-5-release/
[6] https://stackoverflow.com/questions/54040726/mvvmcross-android-appears-to-be-keep-hold-of-viewmodels-and-never-disposing-
[7] https://www.dnonnywals.com/using-xcodes-memory-graph-to-find-memory-leaks/
[8] https://www.mvvmcross.com/mvvmcross-6.0.0-release/
[9] https://stackoverflow.com/questions/41660486/kning-where-retain-cycles-are-and-removing-them