Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Kuidas erineb nõrk sündmuse muster klassikalistest sündmustest mvvmcrossis


Kuidas erineb nõrk sündmuse muster klassikalistest sündmustest mvvmcrossis


Nõrgad sündmuste muster ja klassikalised sündmused MVVMcrossis (või mis tahes .NET -raamistikus) teenivad erinevaid eesmärke ja neil on erinevad rakendused, mille eesmärk on peamiselt mälulekke ja objektide eluea haldamiseks.

klassikalised üritused

.NET -is klassikalised sündmused põhinevad tugevatel viidetel. Kui objekt tellib teise objekti sündmuse, luuakse sündmuse allikast abonendile tugev viide. See tähendab, et seni, kuni sündmuse allikas on viide abonendile, ei saa abonenti prügi koguda, isegi kui seda ei vaja enam või viidatakse mujale rakenduses. See võib põhjustada mälulekkeid, kui abonent ei ole sündmusest selgesõnaliselt tellimata, kui seda enam ei vajata.

MVVMcrossis saab klassikalisi sündmusi kasutada vaatemodellide ja vaadete vaheliseks suhtlemiseks, kuid mälulekke vältimiseks vajavad need hoolikat juhtimist. Näiteks kui ViewModel paljastab sündmuse ja vaade nõuab seda, hoiab ViewModel tugevat viidet vaatele, takistades selle prügi kogumist, kuni tellimus on selgesõnaliselt eemaldatud.

nõrk sündmuse muster

Nõrga sündmuse muster on loodud mälulekke vältimiseks, kasutades tugevate viiteid nõrgad viited. Kui abonent kasutab sündmuse tellimiseks nõrka sündmuse mustrit, on sündmuse allikas abonendile nõrk viide. See võimaldab abonenti prügi koguda, kui sellele ei viidata enam mujal rakenduses, isegi kui see pole sündmusest selgesõnaliselt tühistatud.

MVVMcrossis võib nõrkade sündmuste kasutamine aidata säilitada puhast arhitektuuri, tagades, et vaatemodellid ei peaks vaadetele tugevaid viiteid. See on eriti oluline mobiilirakendustes, kus mäluhaldus on kriitiline. MVVMCROSS pakub nõrkade sündmuste kasutamise hõlbustamiseks selliseid laiendusi nagu "nõrgadsubscribe", võimaldades arendajatel sündmusi tellida ilma tugevaid viiteid, mis võivad põhjustada mälulekkeid.

Rakendamine ja eelised

Nõrgade sündmuste rakendamine hõlmab tavaliselt kohandatud mehhanismi loomist tellimuste haldamiseks, kasutades "nõrkude reference" objekte. See lähenemisviis tagab, et tellijaid saab prügi koguda, kui neid enam ei vajata, vähendades mälulekke riski. Kuid see tutvustab ka täiendavat keerukust ja kerget jõudlust, kuna vajadus kontrollida, kas tellijad on enne nende sündmuste käitlejatele helistamist endiselt elus.

puudused ja kaalutlused

Kuigi nõrk sündmuse muster on mälulekke ennetamiseks kasulik, on sellel mõned puudused. Selle rakendamine võib olla keerulisem kui klassikalised sündmused ja on oht, et "zombie" tellijate objektid, mida enam ei kasutata, kuid mida pole veel prügi kogutud. Kui üritus on tõstetud ja zombi abonendi käitleja täidetakse, võib see põhjustada ootamatut käitumist või vigu.

Kokkuvõtlikult erineb MVVMcrossi nõrk sündmuse muster klassikalistest sündmustest, kasutades nõrku viiteid, et vältida mälulekkeid ja võimaldada tellijaid prügi hõlpsamini koguda. Ehkki see pakub mäluhalduse osas olulisi eeliseid, nõuab see võimalike puuduste hoolikat rakendamist ja kaalumist.

Tsitaadid:
[1] https://stackoverflow.com/a/19379912
]
[3] https://www.reactiveui.net/vs/mvvmcross
[4] https://mustafacanyucel.com/blog/blog-22.html
[5] https://ladimolnar.com/2015/09/14/the-weak-event-pattern-is-dangerous/
[6] https://www.mvvmcross.com/mvvmcross-6.0.0-release/
]
]
]
[10] https://www.mvvmcross.com/documentation/fundamentals/navigation
]
[12] https://stackoverflow.com/questions/13788787/when-to-use-weak-events