Å bruke minnegrafedebugger i Xcode er en effektiv måte å identifisere beholder sykluser i MVVMCROSS -applikasjoner. Her er en trinn-for-trinns guide for hvordan du gjør det:
Introduksjon til Memory Graph Debugger
Memory Graph Debugger er et kraftig verktøy i Xcode som hjelper utviklere med å identifisere minnelekkasjer og beholde sykluser ved å visualisere objektforhold i minnet. Det gir et øyeblikksbilde av gjeldende minnetilstand, som viser hvilke objekter som er beholdt og hvordan de blir referert til.
trinn for å identifisere beholder sykluser
1. Kjør appen din: Start med å kjøre MVVMCROSS -applikasjonen i Xcode. Forsikre deg om at du tester den spesifikke delen av appen der du mistenker at en støttesyklus kan oppstå.
2. Åpne Memory Graph Debugger: Når appen din kjører, åpner du Memory Graph Debugger ved å klikke på tre-node-knappen som ligger mellom den visuelle feilsøking og stedssimulatorknappene i Xcodes verktøylinje. Dette vil fange opp et øyeblikksbilde av appens nåværende tilstand.
3. Analyser minnet øyeblikksbilde: I venstre panel av minnegrafbuggeren vil du se en liste over objekter som for øyeblikket er i minnet, sammen med antall forekomster av hver klasse. Se etter objekter som ikke skal være der eller som har et uventet høyt antall forekomster.
4. Identifiser beholder sykluser: Velg et objekt fra venstre panel for å se referansegrafen. Grafen vil vise sterke referanser som dristige linjer og ukjente referanser (som kan være svake eller sterke) som lysegrå linjer. En støttesyklus er indikert med en sløyfe i grafen der objekter refererer til hverandre på en måte som forhindrer dem i å bli behandlet.
5. Naviger objektgrafer: For å spore opp kilden til en støttesyklus, kan det hende du må navigere gjennom flere objektgrafer. Begynn med det lekkede objektet og følg referansene bakover for å finne foreldreobjektet som beholder det.
6. Inspiser objektdetaljer: Når du klikker på en node i grafen, vil et inspeksjonspanel gi detaljert informasjon om objektet, inkludert dets egenskaper og forhold. Dette kan hjelpe deg med å forstå hvorfor et objekt blir beholdt.
7. Gjenta kjernestrømmer: For å bekrefte en støttesyklus, gjenta kjernestrømmen eller funksjonen i appen din flere ganger, og ta øyeblikksbilder etter hver iterasjon. Hvis antallet forekomster av et bestemt objekt øker over tid, kan det indikere en støttesyklus.
8. Fix Retain Cycle: Når du har identifisert kilden til støttesyklusen, kan du fikse den ved å endre sterke referanser til svake eller uendelige referanser der det er aktuelt. I stenginger bruker du for eksempel `[svakt selv]` for å unngå å fange "selv" sterkt.
Vanlige beholder syklus -scenarier i MVVMCROSS
I MVVMCROSS -applikasjoner oppstår beholder sykluser ofte på grunn av sterke referanser mellom visningsmodeller og visninger eller på grunn av nedleggelser som fanger visningsmodeller eller visninger sterkt. For eksempel, hvis en visningsmodell har en sterk referanse til et syn og visningen også har en sterk referanse tilbake til visningsmodellen, kan ingen av dem behandles.
For å forhindre slike sykluser, må du forsikre deg om at visningsmodellene dine blir renset på riktig måte når visningene blir avskjediget. Bruk livssyklusmetoder levert av MVVMCROSS, for eksempel `forsvunnet ()`, for å frigjøre ressurser og bryte unødvendige referanser.
Ved å følge disse trinnene og forstå hvordan objektforhold blir visualisert i minnegrafen Debugger, kan du effektivt identifisere og fikse støttesykluser i MVVMCROSS -applikasjonene dine.
Sitasjoner:[1] https://doordash.engineering/2019/05/22/ios-memory-leaks-and-tain-cycle-deteksjon-using-xcodes-memory-graph-debugger/
[2] https://careersatdoordash.com/blog/ios-memory-leaks-and-tain-cycle-detection-using-xcodes-memory-graph-debugger/
[3] https://www.tothenew.com/blog/memory-leak-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---fatt-find-memory-laks/
[7] https://moldstud.com/articles/p-wift-memory-management-tips-for-tedain-cycle-issues
[8] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle
[9] https://digginginthecode.wordpress.com/2016/06/14/xamarin-performance-advices/