Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Wat zijn de verschillen tussen het gebruik van zwakkeReference en StrongReference in MVVMCross


Wat zijn de verschillen tussen het gebruik van zwakkeReference en StrongReference in MVVMCross


In MVVMCross is de keuze tussen het gebruik van zwakkeReference en StrongReference cruciaal voor het beheren van geheugen en het voorkomen van geheugenlekken. Hier is een gedetailleerde uitleg van de verschillen en hoe ze van toepassing zijn in de context van MVVMCross:

Sterke referenties

** Sterke referenties zijn het standaardtype referentie in de meeste programmeertalen, inclusief C#. Wanneer naar een object sterk wordt verwezen, kan de afvalverzamelaar het niet verzamelen totdat alle sterke verwijzingen naar het object zijn verwijderd. Dit betekent dat zolang er ten minste één sterke verwijzing naar een object is, het in het geheugen blijft.

In MVVMCross kunnen sterke referenties leiden tot geheugenlekken als ze niet correct worden beheerd. Als een viewModel bijvoorbeeld een sterke verwijzing naar een weergave bevat en de weergave ook een sterke verwijzing naar het ViewModel bevat, wordt een behoudcyclus gemaakt. Dit voorkomt dat beide objecten worden verzameld, zelfs als ze niet langer nodig zijn.

Zwakke referenties

** Zwakke referenties daarentegen stellen de vuilniscollector in staat om het object van verwezen te verzamelen als er geen sterke referenties bestaan. Dit is met name handig in scenario's waarin u een object wilt laten verzamelen als het niet langer nodig is, maar er toch toegang toe wilt hebben als het beschikbaar is.

In MVVMCross wordt het gebruik van zwakke referenties aangemoedigd om cycli tussen viewmodellen en weergaven te voorkomen. In plaats van een viewModel bijvoorbeeld te hebben verwijzen sterk naar een weergave, kunt u een zwakke referentie of een berichtensysteem gebruiken om ertussen te communiceren. Dit zorgt ervoor dat de weergave kan worden verzameld wanneer het niet langer nodig is, zelfs als het viewmodel nog steeds bestaat.

Praktisch voorbeeld in mvvmcross

Overweeg een scenario waarin een viewModel een weergave moet op de hoogte stellen wanneer sommige gegevens worden geladen. Een veel voorkomende aanpak is om een ​​gebeurtenis in het ViewModel te gebruiken waarnaar de weergave zich abonneert. Als de weergave echter sterk op deze gebeurtenis wordt geabonneerd, creëert het een sterke referentie van het ViewModel terug naar het zicht, waardoor de weergave kan worden verzameld.

Om dit te voorkomen, biedt MVVMCross methoden zoals `zwaksubscribe ', waardoor de weergave kan abonneren op de gebeurtenissen van het ViewModel zwak. Op deze manier heeft het ViewModel geen sterke verwijzing naar de weergave, waardoor geheugenlekken worden voorkomen.

Richtlijnen voor het gebruik van zwakke referenties in MVVMCross

- Gebruik zwakke referenties voor weergaven: wanneer een viewModel moet communiceren met een weergave, gebruik zwakke referenties of berichtensystemen om cycli te voorkomen.
- Vermijd sterke verwijzingen naar weergaven: zorg ervoor dat viewmodellen geen sterke verwijzingen naar views bevatten om weergaven te kunnen afval worden verzameld wanneer ze niet langer nodig zijn.
- Gebruik Messaging Systems: overweeg om berichtensystemen zoals MVVMCross's 'IMVXMessenger' te gebruiken om te communiceren tussen viewmodels en weergaven zonder sterke referenties te creëren.

Door deze richtlijnen te volgen, kunt u het geheugen effectief beheren in MVVMCross -toepassingen en veel voorkomende problemen zoals geheugenlekken voorkomen.

Citaten:
[1] https://stackoverflow.com/a/19379912
[2] https://forums.swift.org/t/unowned-references-have-more-overhead-than-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/oiaches-for-implementing-weak-reeferences
[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