Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Kakšne so razlike med uporabo šibke reference in Strongreference v mvvmcross


Kakšne so razlike med uporabo šibke reference in Strongreference v mvvmcross


V MVVMcross je, tako kot v drugih okvirih, izbira med uporabo šibke reference in strongreference ključnega pomena za upravljanje pomnilnika in preprečevanje puščanja spomina. Tu je podrobna razlaga razlik in kako se uporabljajo v kontekstu MVVMcross:

Močne reference

** Močne reference so privzeta vrsta referenc v večini programskih jezikov, vključno s C#. Ko se predmet močno sklicuje, ga zbiralec smeti ne more zbrati, dokler se ne odstranijo vsi močni sklici na predmet. To pomeni, da dokler obstaja vsaj en močan sklicevanje na predmet, bo ostal v pomnilniku.

V MVVMcross lahko močne reference privedejo do uhajanja pomnilnika, če se ne upravlja pravilno. Na primer, če se ViewModel močno sklicuje na pogled in pogled tudi močno sklicuje na ViewModel, se ustvari zadrževalni cikel. To preprečuje, da bi bila oba predmeta zbrana smeti, tudi če ju ni več potrebna.

Šibke reference

** Šibke reference na drugi strani dovolijo zbiralcu smeti, da zbere referenčni predmet, če ne obstajajo močne reference. To je še posebej koristno v scenarijih, kjer želite objektu dovoliti, da se zbira smeti, če ga ni več potrebno, vendar še vedno želite dostopati do njega, če je na voljo.

V MVVMcrossu se spodbuja uporaba šibkih referenc, da se izognete ohranitvi ciklov med ViewModeli in pogledi. Na primer, namesto da bi se ViewModel močno sklicevali na pogled, lahko za komunikacijo med njimi uporabite šibko referenco ali sistem sporočil. To zagotavlja, da se lahko pogled zbira smeti, kadar ga ni več potrebno, tudi če ViewModel še vedno obstaja.

Praktični primer v mvvmcross

Razmislite o scenariju, kjer mora ViewModel obvestiti pogled, ko se naložijo nekateri podatki. Pogost pristop je uporaba dogodka v ViewModel, na katerega se View naroči. Če pa se pogled močno naroči na ta dogodek, ustvari močno referenco od ViewModela nazaj na pogled, kar lahko prepreči, da bi bil pogled zbrano smeti.

Da bi se temu izognili, MVVMcross ponuja metode, kot je `šibkoSubscribe`, ki omogoča, da se pogled šibko naroči na dogodke ViewModela. Tako ViewModel ne drži močnega sklicevanja na pogled, kar preprečuje puščanje pomnilnika.

Smernice za uporabo šibkih referenc v mvvmcross

- Uporabite šibke reference za poglede: Ko mora ViewModel komunicirati s pogledom, uporabite šibke reference ali sisteme za sporočanje, da se izognete zadrževanju ciklov.
- Izogibajte se močnim referencam na poglede: Prepričajte se, da ViewModels ne drži močnih sklicev na poglede, da bi lahko pogledi zbrali smeti, ko jih ni več potrebno.
- Uporabite sisteme za sporočanje: razmislite o uporabi sistemov za sporočanje, kot je MVVMcrossov `IMVXMessenger`, če želite komunicirati med vidnimi modeli in pogledi, ne da bi ustvarili močne reference.

Z upoštevanjem teh smernic lahko učinkovito upravljate pomnilnik v aplikacijah MVVMcross in preprečite skupne težave, kot so puščanje pomnilnika.

Navedbe:
[1] https://stackoverflow.com/a/19379912
[2] https://forums.swift.org/t/unowned-references-have-more-overhead-than-trong-references/72765
[3] https://learn.microsoft.com/sl-us/dotnet/standard/barbage-collection/weak-references
[4] https://www.reddit.com/r/swift/comments/8ifwy9/ios_mvvm_breaking_retainer_cycle_between/bet/
[5] https://stackoverflow.com/questions/40966271/weak-reference-and-trong-reference
[6] https://langdev.stackexchange.com/questions/1351/approaches-for-implement-weak-references
[7] https://putridparrot.com/blog/weakReferences-in-net/
[8] http://java-latte.blogspot.com/2014/07/difference-between-trongreference-weakReference-softreference-phantomreference-in-java.html