MVVMCROSS tagab ürituste tellimuste prügikogu peamiselt nõrkade viidete abil. Siin on üksikasjalik seletus selle toimimise kohta:
MVVMCROSS Messengeri ülevaade
MVVMCROSS Messengeri pistikprogramm on loodud komponentide vahelise sündmuse liitmise hõlbustamiseks. See võimaldab komponentidel suhelda, avaldades ja tellides sõnumeid. Messenger kasutab sündmuste tellimuste jaoks nõrku viiteid, mis aitab vältida mälulekkeid, võimaldades prügikogujal eemaldada enam osutatavaid objekte.
Nõrgad viited MVVMcrossis
Kui tellite MVVMCROSS Messengeri abil sõnumi, saate täpsustada, kas kasutada nõrka või tugevat viidet. Vaikimisi kasutab MVVMcross tellimuste jaoks nõrgaid viiteid (`mvxReference.weak`). See tähendab, et Messenger ei pea tugevat viidet tagasihelistamise meetodile, võimaldades prügikogujal tellimuse eemaldada, kui tellitud objekt väljub ulatusest.
Tellimine ja ebaharilik
Tellimusi saab hallata mitme meetodi abil:
- Telli: sõnumid edastatakse otse kirjastamislingil.
- AllitasunudonMainThread: sõnumid on peamise kasutajaliidese lõime külge.
- AllkirjaontReadPoLthread: sõnumeid on järjekorda lõime kogumi töötlemiseks.
Iga tellimismeetod tagastab `mvxSubscriptionToken`, mida saab kasutada sõnumist tellimusest loobumiseks. Kui aga märgi ei salvestata, võib tellimust kohe koguda.
Prügi kogumise mehhanism
MVVMCROSS -is prügikogumismehhanism tugineb sellele, et `mvxSubscriptionToken on prügi kogutud, kui see ulatub. Kui tellimismärki ei salvestata, on see kõlblik prügikogumiseks, mis võib põhjustada sündmuse käitleri sisetunnet. See lähenemisviis tagab, et objekte ei hoita sündmuste tellimuste tõttu asjatult mällu.
Tellimuse oleku jälgimine
MVVMCROSS pakub ka meetodeid praeguse tellimuse oleku jälgimiseks, näiteks "Hassubscriptionsfor" ja "CountSubScriptionsfor". Lisaks avaldab Messenger sõnumid `mvxSubscriberChangeMessage`, kui tellimused lisatakse, eemaldatakse või aegub, võimaldades komponentidel kohandada oma käitumist praeguse tellimisoleku alusel.
Mäluhalduse parimad tavad
Prügiveo efektiivse kogumise tagamiseks ja mälulekke vältimiseks:
- Kasutage võimaluse korral sündmuste tellimuste jaoks nõrku viiteid.
- Salvestage tellimismärke, kui peate tellimusi selgesõnaliselt haldama.
- Tühistage sündmuste tühistamine, kui neid enam ei vajata, eriti kui kasutate tugevaid viiteid.
- Vältige tugevate viidete hoidmist objektidele, mida tuleks koguda prügi, näiteks vaatemudelid või vaated.
Jälgides neid tavasid ja võimendades MVVMCROSSi nõrka tellimismehhanismi, aitavad arendajad tagada, et sündmuste tellimused ei takista objektide prügi kogumist, säilitades sellega oma rakendustes tõhusa mäluhalduse.
Tsitaadid:[1] https://www.mvvmcross.com/documentation/plugins/messenger
]
]
[4] https://gregshackles.com/weak-subscription-gotcha-in-mvvmcross/
[5] https://github.com/mvvmcross/mvvmcross/issues/2145
]
]
]
]