Ja, minnegrafverktøyet i Xcode kan bidra til å identifisere støttesykluser i MVVMCROSS -applikasjoner. Slik fungerer det og hvordan det kan brukes på MVVMCROSS:
Forstå å beholde sykluser
Beholdesykluser oppstår når to eller flere gjenstander har sterke referanser til hverandre, og forhindrer dem i å bli behandlet fra minnet. Dette er et vanlig spørsmål i iOS -utvikling, spesielt når du bruker delegater eller stenginger som fanger objekter sterkt.
Bruke minnegrafverktøyet
1. Kjører appen og ta øyeblikksbilder: For å bruke minnegrafverktøyet, kjør MVVMCROSS -applikasjonen din i Xcode og naviger gjennom kjernestrømmene. Ta øyeblikksbilder på minnet på forskjellige punkter, spesielt etter å ha navigert bort fra visninger eller visningsmodeller som bør behandles.
2. Analyse av øyeblikksbilder: I minnet grafiske feilsøking viser venstre panel alle objekter som for øyeblikket er i minnet, sammen med deres forekomst. Se etter objekter som burde vært behandlet, men som fremdeles er til stede. En økning i antall forekomster av en klasse over tid kan indikere en støttesyklus.
3. Identifisering av beholder sykluser: Velg et objekt i venstre panel for å se objektgrafen. Grafen viser referansene som holder objektet i minnet. Fet linjer indikerer sterke referanser, mens lysegrå linjer indikerer ukjente referanser (som kan være svake eller sterke). Hvis du ser en sløyfe der gjenstander refererer til hverandre sterkt, er det sannsynligvis en støttesyklus.
4. Fiksing av støttesykluser: Når du har identifisert en støttesyklus, kan du gjennomgå koden din for å finne hvor de sterke referansene blir opprettet. Ofte innebærer dette å endre sterke referanser til svake referanser, spesielt i delegater eller nedleggelser.
søker på mvvmcross
I MVVMCROSS -applikasjoner er visningsmodeller tett koblet til livssyklusen til visninger. Noen ganger kan dette føre til å beholde sykluser hvis det ikke administreres ordentlig. For eksempel, hvis en visningsmodell har en sterk referanse til et syn, og visningen også har en sterk referanse til visningsmodellen (kanskje gjennom en binding), kan en støttesyklus oppstå.
For å unngå dette i MVVMCROSS, sørg for at eventuelle referanser fra visninger til å se modeller er svake. Bruk livssyklusmetoder levert av MVVMCROSS (som `forsvunnet ') for å rydde opp i sterke referanser når synspunkter blir avskjediget. I tillegg kan du bruke minnegrafverktøyet for å bekrefte at visningsmodeller blir behandlet riktig når de tilhørende visningene deres fjernes fra navigasjonsstabelen.
Eksempel på å identifisere støttesykluser i MVVMCROSS
Anta at du har en `myViewModel` som er bundet til en" myView ". Hvis `MyView` har en sterk referanse til` MyViewModel`, og 'MyViewModel` har også en sterk referanse til `MyView` (kanskje gjennom en delegat eller en nedleggelse), vil du se begge objektene som er igjen i minnet selv etter å ha navigert bort fra` MyView`. Ved hjelp av minnegrafverktøyet vil du identifisere denne syklusen og deretter endre koden din for å bruke svake referanser der det er nødvendig.
Ved å følge disse trinnene og bruke Memory Graph -verktøyet, kan du effektivt identifisere og løse beholdningssykluser i MVVMCROSS -applikasjoner, slik at appens minnebruk forblir effektiv og stabil.
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://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-android-uPears-to-Be-holder-hold-of-viewmodels-and-never-disposing-w
[7] https://www.donnywals.com/using-xcodes-memory-graph-----find-memory-laks/
[8] https://www.mvvmcross.com/mvvmcross-6.0.0-release/
[9] https://stackoverflow.com/questions/41660486/knowing-where-thetain-cycles-are-and-rewing-tem