I MVVMCross, som i andra ramverk, är valet mellan att använda svagreferens och starkt reference avgörande för att hantera minne och förhindra minnesläckor. Här är en detaljerad förklaring av skillnaderna och hur de gäller i samband med MVVMCross:
starka referenser
** Starka referenser är standardtypen för referens på de flesta programmeringsspråk, inklusive C#. När ett objekt hänvisas starkt kan sopor samlaren inte samla in det förrän alla starka referenser till objektet har tagits bort. Detta innebär att så länge det finns minst en stark referens till ett objekt kommer det att förbli i minnet.
I MVVMCross kan starka referenser leda till minnesläckor om de inte hanteras ordentligt. Till exempel, om en ViewModel har en stark hänvisning till en vy, och vyn har också en stark hänvisning till ViewModel skapas en behållningscykel. Detta förhindrar att båda föremålen är skräp som samlas in även när de inte längre behövs.
Svaga referenser
** Svaga referenser, å andra sidan, tillåter skräpsamlaren att samla in det refererade objektet om det inte finns några starka referenser. Detta är särskilt användbart i scenarier där du vill låta ett objekt samlas in om det inte längre behövs, men ändå vill komma åt det om det råkar vara tillgängligt.
I MVVMCross uppmuntras användning av svaga referenser att undvika att behålla cykler mellan Viewmodels och vyer. I stället för att ha en ViewModel hänvisar till exempel starkt en vy, kan du använda en svag referens eller ett meddelandesystem för att kommunicera mellan dem. Detta säkerställer att vyn kan samlas in när den inte längre behövs, även om ViewModel fortfarande finns.
Praktiskt exempel i MVVMCross
Tänk på ett scenario där en ViewModel måste meddela en vy när vissa data laddas. Ett vanligt tillvägagångssätt är att använda en händelse i ViewModel som vyn prenumererar på. Men om vyn prenumererar starkt på denna händelse, skapar den en stark referens från ViewModel tillbaka till vyn, vilket kan förhindra att vyn samlas in.
För att undvika detta tillhandahåller MVVMCross metoder som `svagsubscribe`, vilket gör att vyn kan prenumerera på ViewModels händelser svagt. På detta sätt har ViewModel inte en stark hänvisning till vyn och förhindrar minnesläckor.
Riktlinjer för att använda svaga referenser i MVVMCross
- Använd svaga referenser för vyer: När en ViewModel måste interagera med en vy, använd svaga referenser eller meddelandesystem för att undvika att behålla cykler.
- Undvik starka referenser till vyer: Se till att ViewModels inte har starka referenser för att vyer för att vyer ska samlas in när de inte längre behövs.
- Använd meddelandesystem: Överväg att använda meddelandesystem som MVVMCROSS: s "IMVXMessenger" för att kommunicera mellan ViewModels och Views utan att skapa starka referenser.
Genom att följa dessa riktlinjer kan du effektivt hantera minne i MVVMCross -applikationer och förhindra vanliga problem som minnesläckor.
Citeringar:[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-stong-reference
[6] https://langdev.stackexchange.com/questions/1351/approaches-for-implementing-weak-references
[7] https://putridtarrot.com/blog/weakreferences-in-net/
[8] https