MVVMCross'ta, diğer çerçevelerde olduğu gibi, zayıf referans ve güçlü referans kullanmak arasındaki seçim, belleği yönetmek ve bellek sızıntılarını önlemek için çok önemlidir. MVVMCross bağlamında farklılıkların ve nasıl uygulandıklarının ayrıntılı bir açıklaması:
Güçlü Referanslar
** Güçlü referanslar, C#dahil olmak üzere çoğu programlama dilinde varsayılan referans türüdür. Bir nesneye güçlü bir şekilde atıfta bulunulduğunda, çöp toplayıcı, nesneye yapılan tüm güçlü referanslar kaldırılana kadar onu toplayamaz. Bu, bir nesneye en az bir güçlü referans olduğu sürece, bellekte kalacağı anlamına gelir.
MVVMCross'ta güçlü referanslar, düzgün yönetilmezse bellek sızıntılarına yol açabilir. Örneğin, bir ViewModel bir görünüm için güçlü bir referans tutarsa ve görünüm ayrıca ViewModel'e güçlü bir referans tutarsa, bir tutma döngüsü oluşturulur. Bu, her iki nesnenin artık ihtiyaç duyulmadıklarında bile çöp toplanmasını önler.
Zayıf Referanslar
** Zayıf referanslar ise, güçlü referanslar yoksa çöp toplayıcının referans verilen nesneyi toplamasına izin verir. Bu, özellikle ihtiyaç duyulmadığı takdirde bir nesnenin çöp toplanmasına izin vermek istediğiniz senaryolarda yararlıdır, ancak mevcutsa yine de erişmek istemektedir.
MVVMCross'ta, zayıf referanslar kullanmaya, viewmodels ve görünümler arasındaki döngüleri korumaktan kaçınmaya teşvik edilir. Örneğin, bir ViewModel'in bir görünüme güçlü bir şekilde başvurması yerine, aralarında iletişim kurmak için zayıf bir referans veya mesajlaşma sistemi kullanabilirsiniz. Bu, ViewModel hala var olsa bile, görünümün artık gerekmediğinde çöp toplanabilmesini sağlar.
MVVMCross'ta Pratik Örnek
Bazı veriler yüklendiğinde bir ViewModel'in bir görünümü bildirmesi gereken bir senaryoyu düşünün. Yaygın bir yaklaşım, ViewModel'de görünümün abone olduğu bir etkinlik kullanmaktır. Bununla birlikte, görünüm bu olaya güçlü bir şekilde abone olursa, görünümün çöp toplanmasını önleyebilen görünüme geri dönen güçlü bir referans oluşturur.
Bundan kaçınmak için MVVMCross, görünümün ViewModel'in olaylarına zayıf bir şekilde abone olmasını sağlayan `` zayıf dubscribe '' gibi yöntemler sunar. Bu şekilde, ViewModel, hafıza sızıntılarını önleyerek görünüme güçlü bir referans vermez.
MVVMCross'ta Zayıf Referansları Kullanma Yönergeleri
- Görünümler için zayıf referanslar kullanın: Bir ViewModel'in bir görünümle etkileşime girmesi gerektiğinde, döngüleri korumaktan kaçınmak için zayıf referanslar veya mesajlaşma sistemleri kullanın.
- Görünümlere güçlü referanslardan kaçının: ViewModels'in, artık ihtiyaç duyulmadıklarında görünümlerin çöp toplanmasına izin vermek için görüşlere güçlü referanslara sahip olmadığından emin olun.
- Mesajlaşma sistemlerini kullanın: Güçlü referanslar oluşturmadan ViewModels ve Görünümler arasında iletişim kurmak için MVVMCross'un `` Imvxmessenger 'gibi mesajlaşma sistemlerini kullanmayı düşünün.
Bu yönergeleri izleyerek, MVVMCross uygulamalarındaki belleği etkili bir şekilde yönetebilir ve bellek sızıntıları gibi yaygın sorunları önleyebilirsiniz.
Alıntılar:[1] https://stackoverflow.com/a/19379912
[2] https://forums.swift.org/t/unown-references-have-more-ovead-than-thong-references/72765
[3] https://learn.microsoft.com/en-us/dotnet/standard/garbage-colection/weak-references
[4] https://www.reddit.com/r/swift/comments/8ifwy9/ios_mvvm_breaking_retainer_cycle_bebeen//
[5] https://stackoverflow.com/questions/40966271/weak-refence-and-trong-reference
[6] https://langdev.stackexchange.com/questions/1351/dizatlar-for-mplementing-weak-references
[7] https://putridparrot.com/blog/weakrefences-in-net/
[8] http://java-latte.blogspot.com/2014/07/difference-beteron--trongreference-weakference-softreefence-phantomerference-in-java.html