Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Hvad er forskellene mellem at bruge svagreference og stongrreference i MVVMCross


Hvad er forskellene mellem at bruge svagreference og stongrreference i MVVMCross


I MVVMCROSS, som i andre rammer, er valget mellem at bruge svagreference og stongrreference afgørende for at håndtere hukommelse og forhindre hukommelseslækager. Her er en detaljeret forklaring af forskellene, og hvordan de gælder i forbindelse med MVVMCross:

Stærke referencer

** Stærke referencer er den standardtype reference på de fleste programmeringssprog, herunder C#. Når der henvises til et objekt stærkt, kan affaldssamleren ikke indsamle det, før alle stærke referencer til objektet fjernes. Dette betyder, at så længe der er mindst en stærk henvisning til et objekt, forbliver det i hukommelsen.

I MVVMCROSS kan stærke referencer føre til hukommelseslækager, hvis de ikke styres korrekt. For eksempel, hvis en ViewModel har en stærk henvisning til en visning, og udsigten har også en stærk henvisning til ViewModel, oprettes en fastholdelsescyklus. Dette forhindrer begge genstande i at blive indsamlet affald, selv når de ikke længere er nødvendige.

Svage referencer

** Svage referencer tillader på den anden side affaldssamleren at indsamle det refererede objekt, hvis der ikke findes nogen stærke referencer. Dette er især nyttigt i scenarier, hvor du vil tillade, at et objekt indsamles affald, hvis det ikke længere er nødvendigt, men stadig ønsker at få adgang til det, hvis det tilfældigvis er tilgængeligt.

I MVVMCROSS opfordres ved hjælp af svage referencer til at undgå at fastholde cyklusser mellem visningsmodeller og synspunkter. I stedet for at have en ViewModel henviser til eksempel en visning, kan du for eksempel bruge en svag reference eller et meddelelsessystem til at kommunikere mellem dem. Dette sikrer, at udsigten kan indsamles affald, når det ikke længere er nødvendigt, selvom ViewModel stadig eksisterer.

Praktisk eksempel i MVVMCross

Overvej et scenarie, hvor en ViewModel har brug for at underrette en visning, når nogle data indlæses. En almindelig tilgang er at bruge en begivenhed i den visningsmodel, som udsigten abonnerer på. Men hvis visningen abonnerer stærkt på denne begivenhed, skaber det en stærk reference fra ViewModel tilbage til visningen, som kan forhindre, at udsigten bliver indsamlet affald.

For at undgå dette giver MVVMCross metoder som `WeakSubscribe ', som gør det muligt for visningen at abonnere på ViewModel's begivenheder svagt. På denne måde holder ViewModel ikke en stærk henvisning til visningen og forhindrer hukommelseslækager.

Retningslinjer for brug af svage referencer i MVVMCross

- Brug svage referencer til synspunkter: Når en ViewModel har brug for at interagere med udsigt, skal du bruge svage referencer eller messagesystemer for at undgå at beholde cyklusser.
- Undgå stærke henvisninger til synspunkter: Sørg for, at ViewModels ikke har stærke henvisninger til synspunkter for at gøre det muligt at indsamle affald, når de ikke længere er nødvendige.
- Brug messaging -systemer: Overvej at bruge messaging -systemer som MVVMCross's `IMVXMESSHINGER 'til at kommunikere mellem ViewModels og Views uden at skabe stærke referencer.

Ved at følge disse retningslinjer kan du effektivt styre hukommelsen i MVVMCROSS -applikationer og forhindre almindelige problemer som hukommelseslækager.

Citater:
[1] https://stackoverflow.com/a/19379912
)
[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-trong-reference
[6] https://langdev.stackexchange.com/questions/1351/approaches-for-implementing-weak-references
[7] https://putridparrot.com/blog/weakreferences-in-net/
[8] http://java-latte.blogspot.com/2014/07/difference-vetween-trongreference-weakreference-oftreference-fantomreference-in-java.html