Het gebruik van de geheugengrafiek debugger in Xcode is een effectieve manier om behouden cycli in MVVMCross -toepassingen te identificeren. Hier is een stapsgewijze handleiding over hoe het te doen:
Inleiding tot de geheugengrafiek Debugger
De debugger van de geheugengrafiek is een krachtig hulpmiddel in Xcode die ontwikkelaars helpt bij het identificeren van geheugenlekken en cycli behouden door objectrelaties in het geheugen te visualiseren. Het biedt een momentopname van de huidige geheugenstatus, waaruit blijkt welke objecten worden behouden en waarnaar wordt verwezen.
stappen om te identificeren behouden cycli
1. Voer uw app uit: begin met het uitvoeren van uw MVVMCross -applicatie in Xcode. Zorg ervoor dat u het specifieke deel van de app test waar u vermoedt dat een behoudcyclus kan optreden.
2. Open de geheugengrafiek Debugger: eenmaal uw app wordt de debugger van de geheugengrafiek opent door op de knop met drie knooppunten te klikken tussen de visuele debugger en locatiesimulatorknoppen in de werkbalk van Xcode. Hiermee wordt een geheugenmaaktop van de huidige status van uw app vastgelegd.
3. Analyseer het geheugenknapshot: in het linkerpaneel van de debugger van de geheugengrafiek ziet u een lijst met objecten die momenteel in het geheugen zijn, samen met het aantal instanties van elke klasse. Zoek naar objecten die er niet zouden moeten zijn of die een onverwacht hoog aantal instanties hebben.
4. Identificeer behouden cycli: selecteer een object in het linkerpaneel om de referentiegrafiek te bekijken. De grafiek zal sterke referenties weergeven als vetgedrukte lijnen en onbekende referenties (die zwak of sterk kunnen zijn) als lichtgrijze lijnen. Een behoudcyclus wordt aangegeven door een lus in de grafiek waar objecten op een manier verwijzen op een manier die voorkomt dat ze worden gedealloceerd.
5. Navigeer objectgrafieken: om de bron van een behoudcyclus op te sporen, moet u mogelijk door meerdere objectgrafieken navigeren. Begin met het gelekte object en volg de referenties achteruit om het bovenliggende object te vinden dat het behoudt.
6. Inspecteer objectdetails: wanneer u op een knooppunt in de grafiek klikt, biedt een inspectiepaneel gedetailleerde informatie over het object, inclusief de eigenschappen en relaties. Dit kan u helpen begrijpen waarom een object wordt behouden.
7. Herhaal de kernstromen: herhaal de kernstroom of functie om een behoudcyclus te bevestigen meerdere keren in uw app en neemt geheugen snapshots na elke iteratie. Als het aantal exemplaren van een bepaald object in de loop van de tijd toeneemt, kan dit wijzen op een behoudcyclus.
8. De behoudcyclus repareren: Nadat u de bron van de behoudcyclus hebt geïdentificeerd, kunt u deze repareren door sterke verwijzingen naar zwakke of niet -eigen referenties te wijzigen waar nodig. Gebruik bijvoorbeeld bij sluitingen `[zwakke zelf]` om te voorkomen dat 'zelf' sterk wordt vastgelegd.
Gemeenschappelijke bewaarcyclusscenario's in MVVMCross
In MVVMCross -toepassingen treden cycli vaak op vanwege sterke referenties tussen weergavemodellen en weergaven of vanwege sluitingen die weergavemodellen of weergaven sterk vastleggen. Als een weergavemodel bijvoorbeeld een sterke verwijzing naar een weergave bevat en de weergave ook een sterke referentie teruggeeft naar het weergavemodel, kan geen van beide worden gesloten.
Om dergelijke cycli te voorkomen, zorg er dan voor dat uw weergavemodellen correct worden opgeruimd wanneer de weergaven worden afgewezen. Gebruik levenscyclusmethoden die worden geleverd door MVVMCross, zoals `verdwenen ()`, om bronnen vrij te geven en onnodige referenties te breken.
Door deze stappen te volgen en te begrijpen hoe objectrelaties worden gevisualiseerd in de debugger van de geheugengrafiek, kunt u effectief behouden cycli in uw MVVMCross -toepassingen identificeren en repareren.
Citaten:[1] https://doordash.engineering/2019/05/22/ios-memory-delak-and-retain-cycle-detection-using-xcodes-memory-graph-Debugger/
[2] https://careeratdoordash.com/blog/ios-memory-and- en-tretain-cycle-detection-using-xcodes-memory-graph-debugger/
[3] https://www.tothenew.com/blog/memory-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-Leaks/
[7] https://moldstud.com/articles/p-Swift-Memory-Management-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/