Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Hva er forskjellene mellom bruk


Hva er forskjellene mellom bruk


I MVVMCROSS, som i andre rammer, er valget mellom bruk av svakhet og strenghet avgjørende for å håndtere hukommelse og forhindre hukommelseslekkasjer. Her er en detaljert forklaring på forskjellene og hvordan de gjelder i sammenheng med MVVMCROSS:

Sterke referanser

** Sterke referanser er standard referansetypen i de fleste programmeringsspråk, inkludert C#. Når et objekt refereres sterkt, kan ikke søppelkollektoren samle det før alle sterke referanser til objektet er fjernet. Dette betyr at så lenge det er minst en sterk referanse til et objekt, vil det forbli i minnet.

I MVVMCROSS kan sterke referanser føre til minnelekkasjer hvis de ikke administreres riktig. For eksempel, hvis en ViewModel har en sterk referanse til et syn, og utsikten også har en sterk referanse til ViewModel, opprettes en støttesyklus. Dette forhindrer at begge objektene blir samlet inn søppel, selv når de ikke lenger er nødvendig.

Svake referanser

** Svake referanser, derimot, la søppelsamleren samle det refererte objektet hvis det ikke eksisterer sterke referanser. Dette er spesielt nyttig i scenarier der du vil la et objekt bli samlet inn hvis det ikke lenger er nødvendig, men likevel vil ha tilgang til det hvis det skjer tilgjengelig.

I MVVMCROSS oppfordres bruk av svake referanser til å unngå å beholde sykluser mellom ViewModels and Views. For eksempel, i stedet for å ha en ViewModel sterkt referanse til et syn, kan du bruke en svak referanse eller et meldingssystem for å kommunisere mellom dem. Dette sikrer at utsikten kan samles inn søppel når det ikke lenger er nødvendig, selv om ViewModel fremdeles eksisterer.

Praktisk eksempel i MVVMCROSS

Vurder et scenario der en ViewModel trenger å varsle en visning når noen data lastes inn. En vanlig tilnærming er å bruke en hendelse i ViewModel som visningen abonnerer på. Imidlertid, hvis visningen abonnerer sterkt på denne hendelsen, skaper det en sterk referanse fra ViewModel tilbake til visningen, som kan forhindre at utsikten blir samlet søppel.

For å unngå dette gir MVVMCROSS metoder som `WeakSubScribe`, som gjør at visningen kan abonnere på ViewModels hendelser svakt. På denne måten har ikke ViewModel en sterk henvisning til visningen, og forhindrer hukommelsesslekkasjer.

Retningslinjer for bruk av svake referanser i MVVMCROSS

- Bruk svake referanser for visninger: Når en ViewModel trenger å samhandle med en visning, kan du bruke svake referanser eller meldingssystemer for å unngå beholder sykluser.
- Unngå sterke referanser til visninger: Forsikre deg om at ViewModels ikke har sterke referanser til synspunkter for å la visninger bli samlet inn når de ikke lenger er nødvendig.
- Bruk meldingssystemer: Vurder å bruke meldingssystemer som MVVMCROSSs `IMVXMessenger` for å kommunisere mellom ViewModels og Views uten å lage sterke referanser.

Ved å følge disse retningslinjene kan du effektivt administrere minne i MVVMCROSS -applikasjoner og forhindre vanlige problemer som minnelekkasjer.

Sitasjoner:
[1] https://stackoverflow.com/a/19379912
[2] https://forums.swift.org/t/unowned-references-have-more-overhead-han-strong-references/72765
[3] https://learn.microsoft.com/en-us/dotnet/standard/garbage-collection/weak-references
[4] https://www.reddit.com/r/swift/comments/8ifwy9/ios_mvvm_breaking_retainer_cycle_between/
[5] https://stackoverflow.com/questions/40966271/weak-reference-and-strong-reference
[6] https://langdev.stackexchange.com/questions/1351/approaches-for-implementing-weak-referanser
[7] https://putridparrot.com/blog/weakreferences-in-net/
[8] http://java-latte.blogspot.com/2014/07/difference-tween-strongreference-weakreference-softreference-phantomreference-in-java.html