Ano, nástroj pro paměťový graf v Xcode může pomoci identifikovat zachování cyklů v aplikacích MVVMCross. Zde je to, jak to funguje a jak to lze použít na mvvmcross:
Porozumění udržení cyklů
Zachování cyklů se objevuje, když dva nebo více objektů mají silné odkazy na sebe, což jim brání v tom, aby byly vydávány z paměti. Toto je běžný problém ve vývoji iOS, zejména při používání delegátů nebo uzavření, které silně zachycují objekty.
Používání nástroje Graph Memory Graph
1. Spuštění aplikace a pořizování snímků: Chcete -li používat nástroj Graph Memory Graph, spusťte aplikaci MVVMCross v XCode a procházejte jeho základními toky. Vezměte si paměťové snímky v různých bodech, zejména po navigaci od zobrazení nebo zobrazení modelů, které by měly být rozdávány.
2. Analýza snímků: V debuggeru grafu paměti levý panel zobrazuje všechny objekty v současné době v paměti spolu s jejich počty instancí. Hledejte objekty, které měly být vydány, ale jsou stále přítomny. Zvýšení počtu instancí třídy v průběhu času může naznačovat cyklus udržení.
3. Identifikace Cyccle Reain: Vyberte objekt v levém panelu a zobrazit jeho graf objektu. Graf zobrazuje odkazy, které udržují objekt v paměti. Odvážné linie označují silné odkazy, zatímco světle šedé čáry označují neznámé odkazy (které by mohly být slabé nebo silné). Pokud vidíte smyčku, kde se objekty navzájem silně odkazují, je to pravděpodobně cyklus udržení.
4. Oprava cyklů zachování: Jakmile identifikujete cyklus udržení, zkontrolujte svůj kód a zjistěte, kde jsou vytvářeny silné reference. To často zahrnuje změnu silných odkazů na slabé odkazy, zejména u delegátů nebo uzavření.
Aplikuje se na mvvmcross
V aplikacích MVVMCross jsou modely zobrazení pevně spojeny s životním cyklem zhlédnutí. To může někdy vést k udržení cyklů, pokud nebude správně zvládnuto. Například, pokud model pohledu má silný odkaz na pohled a pohled má také silný odkaz na model pohledu (možná prostřednictvím vazby), může dojít k zachování cyklu.
Abyste tomu zabránili v MVVMCrossu, ujistěte se, že jakékoli odkazy z pohledu k zobrazení modelů jsou slabé. Použijte metody životního cyklu poskytované MVVMCrossem (jako „zmizel“) k vyčištění jakýchkoli silných odkazů, když jsou pohledy zamítnuty. Navíc použijte nástroj pro paměťový graf k ověření, že modely zobrazení jsou správně rozdávány, když jsou jejich přidružené pohledy odstraněny z navigačního zásobníku.
Příklad identifikace zadržovacích cyklů v mvvmcross
Předpokládejme, že máte „myviewModel“, který je vázán na „myview“. Pokud `myView` má silný odkaz na` myviewModel` a `myviewModel` také má silný odkaz na„ myview “(možná prostřednictvím delegáta nebo uzavření), viděli byste, že oba objekty zůstávají v paměti, a to i po navigaci pryč od„ myview “. Pomocí nástroje Graph Memory Graph určíte tento cyklus a poté upravit svůj kód tak, aby v případě potřeby používal slabé odkazy.
Dodržováním těchto kroků a pomocí nástroje Graph Memory Graph můžete efektivně identifikovat a vyřešit zachování cyklů v aplikacích MVVMCross a zajistit, aby využití paměti vaší aplikace zůstává efektivní a stabilní.
Citace:[1] https://doordash.engineering/2019/05/22/IOS-Memory-leaks-and--Retain-Cycle-dection-using-xcodes-marph-debugger/
[2] https://careersatdoordash.com/blog/os-Memory-leaks-and-retain-dection-using-xcodes-marph-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-anroid-appears-to--bord-of-viewModels-and-never-diSposing-w
[7] https://www.donnywals.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/kinging-where-retain-cycles-are-and-removing-them