Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Aké sú osvedčené postupy pre zrušenie predpisovania udalostí v MVVMCross


Aké sú osvedčené postupy pre zrušenie predpisovania udalostí v MVVMCross


Odhadovanie udalostí v MVVMCross je rozhodujúce pre zabránenie úniku pamäte a zabezpečenie toho, aby sa vaša aplikácia správa podľa očakávania. Tu je niekoľko osvedčených postupov na zrušenie predpisovania udalostí v MVVMCross:

1. Používanie `IMVXMessenger` **

MVVMCross poskytuje doplnok „IMVXMessenger`“, ktorý vám umožňuje publikovať a prihlásiť sa na odber udalostí pomocou slabých referencií. To znamená, že keď sa objekt predplatiteľa už viac nepovažuje za inde vo vašom kóde, bude sa zbierať odpadky a predplatné sa automaticky odstráni. Ak však potrebujete výslovne zrušiť odber, môžete použiť metódu `UNDUBSCRIBLE` na„ IMVXMessenger` alebo volajte `dispose ()` na token predplatnom vrátení metódou `Pripísanie [1].

2. Ukladanie tokenov predplatného **

Pri prihlásení sa na odber udalostí pomocou `IMVXMessenger` je nevyhnutné uložiť token predplatného, ​​ak plánujete ručne zrušiť odber. Ak token nie je uložený a je zozbieraný odpad, predplatné sa automaticky odstráni. To môže viesť k neočakávanému správaniu, ak sa spoliehate na to, že predplatné je aktívne na určité obdobie [1] [7].

3. Implementácia `Idisposable` **

V prípade tried, ktoré sa prihlásia na odber udalostí, je implementácia rozhrania „Idisposable“ dobrou praxou. V metóde „Dispose` môžete výslovne odhaliť odber udalostí, aby ste sa uistili, že zdroje sa uvoľnia, keď už tento objekt nie je potrebný. Tento prístup pomáha predchádzať úniku pamäte zabezpečením odstránenia spracovateľov udalostí, keď je predplatiteľ zlikvidovaný [4] [9].

4. Vyhýbanie sa zbytočným predplatným **

Uistite sa, že sa prihlásite na odber udalostí, ak je to potrebné, a odhlásite sa, keď už predplatné nie je potrebné. Vyhýbajte sa opakovaným prihlásením sa na odber a zrušenie predpisovania tej istej udalosti v celej životnosti inštancie triedy, pretože to môže viesť k zbytočnej zložitosti a potenciálnym problémom [4].

5. Použitie slabých referencií **

MVVMCross's `IMVXMessenger` v predvolenom nastavení používa slabé referencie, čo umožňuje odberateľom, aby sa zbierali odpadky, ak sa už viac netýkajú inde vo vašom kóde. To pomáha predchádzať úniku pamäte, ale vyžaduje starostlivé riadenie tokenov predplatného, ​​ak je potrebné manuálne zrušenie [1] [3].

6. Manipulácia s udalosťami životného cyklu aplikácií **

V MVVMCross môžete v súbore `app.xaml.cs` zvládnuť aj udalosti životného cyklu aplikácií, ako napríklad` Onexit`. Ak potrebujete vykonať čistenie alebo odhlásenie z udalostí pri opustení aplikácie, je to vhodné miesto na to. Uistite sa však, že máte odkaz na potrebné modely alebo služby zobrazenia na vykonanie požadovaných akcií [2].

Dodržiavaním týchto praktík môžete efektívne spravovať predplatné udalostí v MVVMCross a zabezpečiť, aby vaša aplikácia zostala efektívna a bez úniku pamäte.

Citácie:
[1] https://www.mvvmcross.com/documentation/plugins/messenger
[2] http://stackoverflow.com/questions/30848118/capturing-the-Onexit-event-in-wpf-with-mvvvmcross/31784453
[3] https://prismLibrary.github.io/docs/event-aggregator.html
[4] https://www.reddit.com/r/csharp/comments/12x8e2w/always_remove_event_handler_first_before_adding/
[5] https://www.mvvmcross.com/documentation/funmamentals/navigation
[6] https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/events/how-to-subscribe-mer-and-and-unsubscriber-from-events
[7] https://stackoverflow.com/questions/19781446/how-to-unsubscribe-for-weaksubscribe-fribe-fisber-in-mvvmcross
[8] https://www.mvvmcross.com/documentation/getting-started/mvvmcross-woreview
[9] https://dev.to/MOH_MOH701/C-Advanced-unsubscrifing-from-events-7ea
[10] https://www.mvvmcross.com/documentation/funmamentals/viewmodel-lifecycle