Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Jak mohu použít ladění paměťového grafu k identifikaci zachování cyklů v aplikacích MVVMCross


Jak mohu použít ladění paměťového grafu k identifikaci zachování cyklů v aplikacích MVVMCross


Použití debuggeru paměťového grafu v Xcode je efektivní způsob, jak identifikovat zachování cyklů v aplikacích MVVMCross. Zde je průvodce krok za krokem, jak to udělat:

Úvod do grafu paměťového grafu

Debugger grafu paměti je výkonný nástroj v Xcode, který vývojářům pomáhá identifikovat úniky paměti a udržovat cykly vizualizací vztahů objektů v paměti. Poskytuje snímek aktuálního stavu paměti a ukazuje, které objekty jsou zachovány a jak jsou odkazovány.

Kroky k identifikaci zachování cyklů

1. Spusťte aplikaci: Začněte spuštěním aplikace MVVMCross v Xcode. Ujistěte se, že testujete konkrétní část aplikace, kde máte podezření, že může dojít k cyklu zachování.

2. Otevřete labugger grafu paměťového grafu: Jakmile je vaše aplikace spuštěna, otevřete debugger grafu paměti kliknutím na tlačítko tří uzlů umístěné mezi vizuálními debugger a tlačítky simulátoru umístění na panelu nástrojů XCode. Tím se zachytí snímek paměti aktuálního stavu vaší aplikace.

3. Analyzujte snímek paměti: V levém panelu ladění paměťového grafu uvidíte seznam objektů, které jsou v současné době v paměti, spolu s počtem instancí každé třídy. Hledejte objekty, které by tam neměly být nebo které mají nečekaně vysoký počet instancí.

4. Identifikujte udržovací cykly: Vyberte objekt z levého panelu a zobrazí se jeho referenční graf. Graf bude zobrazovat silné odkazy jako odvážné linie a neznámé odkazy (které by mohly být slabé nebo silné) jako světle šedé čáry. Cyklus udržení je označen smyčkou v grafu, kde se objekty navzájem odkazují způsobem, který jim brání v rozvozování.

5. Navigace Grafy objektů: Chcete -li sledovat zdroj cyklu zachování, možná budete muset procházet více grafů objektů. Začněte s únikovým objektem a sledujte odkazy dozadu a najděte nadřazený objekt, který si jej udržuje.

6. Zkontrolujte podrobnosti objektu: Když kliknete na uzel v grafu, inspekční panel poskytne podrobné informace o objektu, včetně jeho vlastností a vztahů. To vám může pomoci pochopit, proč je objekt zachován.

7. Opakujte toky jádra: Chcete -li potvrdit cyklus udržení, několikrát opakujte tok nebo funkci jádra nebo funkci a po každé iteraci pořizujte snímky paměti. Pokud se počet instancí konkrétního objektu v průběhu času zvyšuje, může to znamenat cyklus udržení.

8. Opravte cyklus udržení: Jakmile identifikujete zdroj cyklu udržení, můžete jej opravit změnou silné odkazy na slabé nebo nezúčastněné odkazy, kde je to vhodné. Například v uzavření používejte `[slabé já]`, abyste se vyhnuli silně zachycení „self“.

Společných scénářů udržování cyklu v mvvmcross

V aplikacích MVVMCross se často vyskytují cykly v důsledku silných odkazů mezi modely pohledu a pohledy nebo kvůli uzavřením modelů pohledu nebo pohledy silně. Například, pokud model pohledu má silný odkaz na pohled a pohled také drží silnou odkaz zpět na model pohledu, nelze jej rozdávat.

Chcete -li zabránit těmto cyklům, ujistěte se, že při zamítnutí zobrazení jsou vaše modely pohledu správně vyčištěny. Použijte metody životního cyklu poskytované MVVMCross, jako je `zmizel ()`, k uvolnění zdrojů a porušení zbytečných odkazů.

Dodržováním těchto kroků a pochopením toho, jak jsou vztahy objektů vizualizovány v labuggeru paměťového grafu, můžete ve svých aplikacích MVVMCross efektivně identifikovat a opravit zachování cyklů.

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://forums.developer.apple.com/forums/thread/112268
[5] https://www.mvvmcross.com/mvvmcross-5-release/
[6] https://www.donnywals.com/using-xcodes-memory-graph-to-find-Memory---eaks/
[7] https://moldstud.com/articles/p-swift-Memory-nagement-tips-for--retain-Cycle-issues
[8] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle
[9] https://digginginthecode.wordpress.com/2016/06/14/xamarin-performance-advices/