Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Hur använder jag minnesgrafen Debugger för att identifiera behålla cykler i MVVMCross -applikationer


Hur använder jag minnesgrafen Debugger för att identifiera behålla cykler i MVVMCross -applikationer


Att använda minnesgrafen Debugger i Xcode är ett effektivt sätt att identifiera behålla cykler i MVVMCross -applikationer. Här är en steg-för-steg-guide om hur man gör det:

Introduktion till minnesgrafen felsökare

Memory Graph Debugger är ett kraftfullt verktyg i Xcode som hjälper utvecklare att identifiera minnesläckor och behålla cykler genom att visualisera objektrelationer i minnet. Det ger en ögonblicksbild av det aktuella minnesläget som visar vilka objekt som behålls och hur de hänvisas till.

Steg för att identifiera behålla cykler

1. Kör din app: Börja med att köra din MVVMCross -applikation i Xcode. Se till att du testar den specifika delen av appen där du misstänker att en behållningscykel kan inträffa.

2. Öppna minnesgrafen Debugger: När din app är igång öppnar du minnesgrafen Debugger genom att klicka på knappen med tre noder som finns mellan den visuella felsökaren och platssimulatorknapparna i XcoDes verktygsfält. Detta kommer att fånga en minnesbild av din apps nuvarande tillstånd.

3. Analysera ögonblicksbilden: I den vänstra panelen på Memory Graph Debugger ser du en lista över objekt som för närvarande är i minnet, tillsammans med antalet instanser för varje klass. Leta efter objekt som inte borde vara där eller som har ett oväntat stort antal instanser.

4. Identifiera behålla cykler: Välj ett objekt från den vänstra panelen för att se dess referensgraf. Grafen visar starka referenser som djärva linjer och okända referenser (som kan vara svaga eller starka) som ljusgrå linjer. En behållningscykel indikeras av en slinga i diagrammet där objekt hänvisar till varandra på ett sätt som förhindrar dem från att hanteras.

5. Navigera objektgrafer: För att spåra källan till en behållningscykel kan du behöva navigera genom flera objektgrafer. Börja med det läckta objektet och följ referenserna bakåt för att hitta moderobjektet som behåller det.

6. Kontrollera objektinformation: När du klickar på en nod i grafen kommer en inspektionspanel att ge detaljerad information om objektet, inklusive dess egenskaper och relationer. Detta kan hjälpa dig att förstå varför ett objekt bibehålls.

7. Upprepa kärnflöden: För att bekräfta en behållningscykel, upprepa kärnflödet eller funktionen i din app flera gånger, ta minnesbilder efter varje iteration. Om antalet instanser av ett visst objekt ökar med tiden kan det indikera en behållningscykel.

8. Fixa hållcykeln: När du har identifierat källan till kvarhållscykeln kan du fixa den genom att ändra starka referenser till svaga eller oägda referenser där så är lämpligt. Till exempel, i stängningar, använd `[Svagt själv]` för att undvika att fånga "själv" starkt.

Vanliga behållningsscenarier i MVVMCross

I MVVMCross -applikationer uppstår ofta cykler på grund av starka referenser mellan visningsmodeller och vyer eller på grund av att stängningar fångar visningsmodeller eller vyer starkt. Till exempel, om en visningsmodell har en stark referens till en vy och vyn också håller en stark referens tillbaka till visningsmodellen, kan ingen av dem hanteras.

För att förhindra sådana cykler, se till att dina visningsmodeller städas ordentligt när vyer avvisas. Använd livscykelmetoder som tillhandahålls av MVVMCross, till exempel `försvann ()", för att släppa resurser och bryta onödiga referenser.

Genom att följa dessa steg och förstå hur objektrelationer visualiseras i Memory Graph Debugger kan du effektivt identifiera och fixa behålla cykler i dina MVVMCross -applikationer.

Citeringar:
]
]
[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-laks/
]
[8] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle
[9] https://digginginthecode.wordpress.com/2016/06/14/xamarin-performance-advices/