MVVMCROSS, tāpat kā citos ietvaros, izvēlei starp vājo atzīme un stiprinājumu ir izšķiroša nozīme, lai pārvaldītu atmiņu un novērstu atmiņas noplūdes. Šeit ir detalizēts atšķirību skaidrojums un tas, kā tās tiek piemērotas MVVMCROSS kontekstā:
Spēcīgas atsauces
** Spēcīgas atsauces ir noklusējuma atsauces veids lielākajā daļā programmēšanas valodu, ieskaitot C#. Kad objekts tiek izteikts spēcīgi, atkritumu savācējs to nevar savākt, kamēr nav noņemtas visas spēcīgās atsauces uz objektu. Tas nozīmē, ka, kamēr ir vismaz viena spēcīga atsauce uz objektu, tas paliks atmiņā.
MVVMCROSS spēcīgas atsauces var izraisīt atmiņas noplūdes, ja tās nav pareizi pārvaldītas. Piemēram, ja ViewModel ir spēcīga atsauce uz skatu, un skats arī satur spēcīgu atsauci uz skatuModeli, tiek izveidots saglabāšanas cikls. Tas novērš abu priekšmetu savākšanu atkritumus pat tad, ja tie vairs nav nepieciešami.
Vājas atsauces
** Vājās atsauces, no otras puses, ļauj atkritumu savācējam apkopot atsauces objektu, ja nepastāv spēcīgas atsauces. Tas ir īpaši noderīgi scenārijos, kad vēlaties ļaut objektam savākt atkritumus, ja tas vairs nav vajadzīgs, bet tomēr vēlaties tam piekļūt, ja tas notiek, lai tas būtu pieejams.
MVVMCROSS vāju atsauces izmantošana tiek mudināta izvairīties no saglabāšanas cikliem starp ViewModels un skatiem. Piemēram, tā vietā, lai skataModel būtu stingri atsauce uz skatu, jūs varat izmantot vāju atsauci vai ziņojumapmaiņas sistēmu, lai sazinātos starp tām. Tas nodrošina, ka skatu var savākt atkritumus, kad tas vairs nav vajadzīgs, pat ja ViewModel joprojām pastāv.
Praktisks piemērs MVVMCROSS
Apsveriet scenāriju, kurā ViewModel jāpaziņo skatam, kad tiek ielādēti daži dati. Kopīga pieeja ir izmantot notikumu ViewModel, kuru skats abonē. Tomēr, ja skats ir stingri abonēts uz šo notikumu, tas rada spēcīgu atsauci no ViewModel atpakaļ uz skatu, kas var novērst skata savākšanu atkritumus.
Lai no tā izvairītos, MVVMCROSS nodrošina tādas metodes kā `vāji, kas ļauj ViewModel notikumiem vāji abonēt ViewModel notikumus. Tādā veidā ViewModel neuztur spēcīgu atsauci uz skatu, novēršot atmiņas noplūdes.
Vadlīnijas vāju atsauču izmantošanai MVVMCROSS
- Skatiem izmantojiet vājas atsauces: Ja ViewModel ir jā mijiedarbojas ar skatu, izmantojiet vājas atsauces vai ziņojumapmaiņas sistēmas, lai izvairītos no saglabāšanas cikliem.
- Izvairieties no spēcīgām atsaucēm uz viedokļiem: pārliecinieties, ka ViewModels nav spēcīgas atsauces uz skatu, lai skati varētu savākt atkritumus, kad tie vairs nav nepieciešami.
- Izmantojiet ziņojumapmaiņas sistēmas: apsveriet iespēju izmantot ziņojumapmaiņas sistēmas, piemēram, MVVMCross's `IMVXMessenger`, lai sazinātos starp ViewModels un skatiem, neveidojot spēcīgas atsauces.
Izpildot šīs vadlīnijas, jūs varat efektīvi pārvaldīt atmiņu MVVMCROSS lietojumprogrammās un novērst tādas kopīgas problēmas kā atmiņas noplūdes.
Atsauces:[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
.
[5] https://stackoverflow.com/questions/40966271/weak-reference-and-strong-reference
[6.]
[7] https://putridparrrot.com/blog/weakreferences-in-net/
[8] http://java-latte.blogspot.com/2014/07/diference-between-strongreference-weakreference-softreference-phantomreference-in-java.html