MVVMCross'taki (veya herhangi bir .NET çerçevesinde) zayıf olay deseni ve klasik olaylar farklı amaçlara hizmet eder ve öncelikle bellek sızıntılarını ve nesne ömrünü yönetmeyi amaçlayan farklı uygulamalara sahiptir.
Klasik Etkinlikler
.NET'teki klasik etkinlikler güçlü referanslara dayanmaktadır. Bir nesne başka bir nesnenin bir olayına abone olduğunda, olay kaynağından aboneye güçlü bir referans oluşturulur. Bu, olay kaynağı aboneye bir referans verdiği sürece, başvurunun başka bir yerinde artık gerekli olmasa bile, abonenin çöp toplanamayacağı anlamına gelir. Bu, abone artık ihtiyaç duyulmadığında olaydan açıkça abonelemediyse bellek sızıntılarına yol açabilir.
MVVMCross'ta klasik etkinlikler, viewmodels ve görünümler arasındaki iletişim için kullanılabilir, ancak bellek sızıntılarından kaçınmak için dikkatli bir yönetim gerektirir. Örneğin, bir ViewModel bir olayı ortaya çıkarırsa ve bir görünüm buna abone olursa, ViewModel görünüm için güçlü bir referans tutar ve abonelik açıkça kaldırılıncaya kadar çöp toplanmasını önler.
Zayıf olay deseni
Zayıf olay paterni, güçlü referanslar yerine zayıf referanslar kullanarak bellek sızıntılarını önlemek için tasarlanmıştır. Bir abone bir olaya abone olmak için zayıf bir olay modeli kullandığında, olay kaynağı aboneye zayıf bir referans tutar. Bu, abonenin, etkinlikten açıkça abone olmasa bile, başvurunun başka bir yerinde referanslanmadığı takdirde çöp toplanmasını sağlar.
MVVMCross'ta, zayıf olaylar kullanmak, ViewModels'in görüşlere güçlü referanslara sahip olmamasını sağlayarak temiz bir mimarinin korunmasına yardımcı olabilir. Bu, bellek yönetiminin kritik olduğu mobil uygulamalarda özellikle önemlidir. MVVMCross, zayıf olayların kullanımını kolaylaştırmak için `` zayıf subscribe '' gibi uzantılar sağlar ve geliştiricilerin bellek sızıntılarına yol açabilecek güçlü referanslar oluşturmadan olaylara abone olmalarına izin verir.
Uygulama ve Avantajlar
Zayıf olayların uygulanması genellikle `` zayıf referans '' nesnelerini kullanarak abonelikleri yönetmek için özel bir mekanizma oluşturmayı içerir. Bu yaklaşım, abonelerin artık ihtiyaç duyulmadıkları takdirde çöp toplanmasını ve bellek sızıntıları riskini azaltmasını sağlar. Bununla birlikte, olay işleyicilerini çağırmadan önce abonelerin hala hayatta olup olmadığını kontrol etme ihtiyacı nedeniyle ek karmaşıklık ve hafif bir performans ek yükü getirir.
dezavantajlar ve hususlar
Zayıf olay deseni bellek sızıntılarını önlemek için faydalı olsa da, bazı dezavantajları vardır. Uygulamak klasik olaylardan daha karmaşık olabilir ve artık kullanımda olmayan ancak henüz çöp toplanmış "zombi" abonelerinin nesneleri riski vardır. Bir etkinlik yükseltilir ve bir zombi abonesinin işleyicisi yürütülürse, beklenmedik davranışlara veya hatalara yol açabilir.
Özetle, MVVMCross'taki zayıf olay paterni, bellek sızıntılarını önlemek ve abonelerin çöplerin daha kolay toplanmasına izin vermek için zayıf referanslar kullanarak klasik olaylardan farklıdır. Bellek yönetimi açısından önemli faydalar sunsa da, potansiyel dezavantajların dikkatli bir şekilde uygulanmasını ve dikkate alınmasını gerektirir.
Alıntılar:[1] https://stackoverflow.com/a/19379912
[2] http://stackoverflow.com/questions/30848118/capturing-the-onexit-event-in-wpf-with-mvvmcross/31784453
[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-patern-is-dangerous/
[6] https://www.mvvmcross.com/mvvmcross-6.0.0-release/
[7] https://yanxiaodi.gitbook.io/xamarin-mvmcross-handbook/using-mvvmcross-to-create-mour-first-xamarin-app/navigation/respersing-the-se-from-different-controls-in-the-listview
[8] https://www.devleader.ca/2024/02/14/weak-events-in-v-vo-to-avoid-nasty-nasty-nasty-leaks
[9] https://learn.microsoft.com/en-us/dotnet/desktop/wpf/events/weak-event-pterings?view=netdesktop-9.0
[10] https://www.mvvmcross.com/documentation/fundamentals/navigation
[11] https://www.mvvmcross.com/documentation/fundament/viewmodel-lifecycle
[12] https://stackoverflow.com/questions/13788787/who-to-o-weak-events