MVVMCross'taki olaylardan abone olmak, bellek sızıntılarını önlemek ve uygulamanızın beklendiği gibi davranmasını sağlamak için çok önemlidir. MVVMCross'taki olaylardan abonelikten çıkmak için en iyi uygulamalar:
1.
MVVMCross, zayıf referanslar kullanarak olaylara yayınlamanızı ve abone olmanızı sağlayan `imvxmessenger` eklentisini sağlar. Bu, abone nesnesi artık kodunuzun başka bir yerinde referans verilmediğinde, çöp toplanacak ve aboneliğin otomatik olarak kaldırılacağı anlamına gelir. Bununla birlikte, açıkça aboneliğin iptal edilmesi gerekiyorsa, `` aboneliğe () `` `` aboneliğe '' yöntemi üzerinde döndürülen `` aboneliğe () '' adını verebilirsiniz.
2. Abonelik belirteçlerini depolama **
`` Imvxmessens '' kullanarak olaylara abone olurken, manuel olarak abonelikten çıkmayı planlıyorsanız abonelik jetonunu depolamak önemlidir. Jeton depolanmazsa ve çöp toplanırsa, abonelik otomatik olarak kaldırılır. Aboneliğin belirli bir süre için aktif olmasına güveniyorsanız, bu beklenmedik davranışlara yol açabilir [1] [7].
3. `` İdisposable '' ** uygulama
Etkinliklere abone olan sınıflar için, `` Idisposable '' arayüzünü uygulamak iyi bir uygulamadır. `` Dishose '' yönteminde, nesneye artık ihtiyaç duyulmadığında kaynakların serbest bırakılmasını sağlamak için olaylardan açıkça aboneliğini kaldırabilirsiniz. Bu yaklaşım, abone [4] [9] 'dan atıldığında olay işleyicilerinin kaldırılmasını sağlayarak bellek sızıntılarını önlemeye yardımcı olur.
4. Gereksiz aboneliklerden kaçınmak **
Yalnızca gerektiğinde olaylara abone olduğunuzdan ve aboneliğe artık ihtiyaç duyulmadığında abonelikten çıktığınızdan emin olun. Bir sınıf örneğinin yaşamı boyunca aynı olaya tekrar tekrar abone olmaktan ve abone olmaktan kaçının, çünkü bu gereksiz karmaşıklığa ve potansiyel sorunlara yol açabilir [4].
5. Zayıf Referanslar Kullanma **
MVVMCross'un `` imvxmessenger ', varsayılan olarak zayıf referanslar kullanır, bu da abonelerin artık kodunuzda başka bir yerde başvurulmadığı takdirde çöp toplanmasına izin verir. Bu, bellek sızıntılarını önlemeye yardımcı olur, ancak manuel abonelleştirme gerekliyse abonelik jetonlarının dikkatli bir şekilde yönetilmesini gerektirir [1] [3].
6. Uygulama Uygulama Yaşam Döngüsü Olayları **
MVVMCross'ta `` App.xaml.cs` dosyasındaki `Onexit 'gibi uygulama yaşam döngüsü olaylarını da işleyebilirsiniz. Uygulama çıktığında olaylardan temizleme veya abonelikten çıkmanız gerekiyorsa, bu bunu yapmak için uygun bir yerdir. Bununla birlikte, gerekli eylemleri gerçekleştirmek için gerekli görünüm modellerine veya hizmetlere referans verdiğinizden emin olun [2].
Bu uygulamaları izleyerek, MVVMCross'taki olay aboneliklerini etkili bir şekilde yönetebilir ve uygulamanızın verimli ve bellek sızıntılarından uzak kalmasını sağlayabilirsiniz.
Alıntılar:[1] https://www.mvvmcross.com/documentation/plugins/messenger
[2] http://stackoverflow.com/questions/30848118/capturing-the-onexit-event-in-wpf-with-mvvmcross/31784453
[3] https://prismlibrary.github.io/docs/event-aggreator.html
[4] https://www.reddit.com/r/csharp/comments/12x8e2w/always_remove_event_handler_first_before_adding/
[5] https://www.mvvmcross.com/documentation/fundamentals/navigation
[6] https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/events/how-to-bscribe-to- and-unsubscribet-from-events
[7] https://stackoverflow.com/questions/19781446/how-to-o-nsubscribe-for-weaksbcribe-in-mvvmcross
[8] https://www.mvvmcross.com/documentation/getting-started/mvvmcross-overview
[9] https://dev.to/moh_moh701/c-vaced-unsubscribing-from-events-7ea
[10] https://www.mvvmcross.com/documentation/fundament/viewmodel-lifecycle