Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Bellek grafiği aracı, mvvmcross uygulamalarında döngüleri korumaya yardımcı olabilir mi


Bellek grafiği aracı, mvvmcross uygulamalarında döngüleri korumaya yardımcı olabilir mi


Evet, Xcode'daki bellek grafiği aracı, MVVMCross uygulamalarındaki döngülerin tutulmasına yardımcı olabilir. İşte nasıl çalışır ve MVVMCross'a nasıl uygulanabileceği:

Tutma Döngüleri Anlamak

Tutma döngüleri, iki veya daha fazla nesne birbirine güçlü referanslar tuttuğunda oluşur ve bellekten dağıtılmasını önler. Bu, özellikle nesneleri güçlü bir şekilde yakalayan delegeler veya kapanışlar kullanırken iOS geliştirmede yaygın bir konudur.

Bellek Grafiği Aracını Kullanma

1. Uygulamayı çalıştırmak ve anlık görüntüleri almak: Bellek grafik aracını kullanmak için MVVMCross uygulamanızı Xcode'da çalıştırın ve çekirdek akışlarında gezinin. Farklı noktalarda, özellikle de dağıtılması gereken görünümlerden veya görüntülenen modellerden uzaklaştıktan sonra hafıza anlık görüntüleri alın.

2. Anlık görüntüleri analiz etmek: Bellek grafiği hata ayıklayıcısında, sol panel şu anda bellekte tüm nesneleri görüntüler ve örnek sayılarıyla görüntüler. İşlenmesi gereken ancak hala mevcut olan nesneleri arayın. Bir sınıfın zaman içinde örnek sayısındaki artış, bir tutma döngüsünü gösterebilir.

3. Döngüleri Koruma: Nesne grafiğini görüntülemek için sol panelde bir nesne seçin. Grafik, nesneyi bellekte tutan referansları gösterir. Kalın çizgiler güçlü referansları gösterirken, açık gri çizgiler bilinmeyen referansları gösterir (zayıf veya güçlü olabilir). Nesnelerin birbirine güçlü bir şekilde başvurduğu bir döngü görürseniz, muhtemelen bir tutma döngüsüdür.

4. Tutma döngülerini düzeltme: Bir tutma döngüsü belirledikten sonra, güçlü referansların nerede oluşturulduğunu bulmak için kodunuzu gözden geçirin. Genellikle, bu, özellikle delegelerde veya kapanışlarda zayıf referanslara güçlü referansları değiştirmeyi içerir.

mvvmcross'a başvuruyor

MVVMCross uygulamalarında, görünüm modelleri görüntüleme yaşam döngüsüne sıkıca bağlanır. Bu, bazen düzgün yönetilmezse döngüleri korumaya yol açabilir. Örneğin, bir görünüm modeli bir görünüm için güçlü bir referans tutarsa ​​ve görünüm ayrıca görünüm modeline (belki de bir bağlama yoluyla) güçlü bir referans tutarsa, bir tutma döngüsü meydana gelebilir.

MVVMCross'ta bundan kaçınmak için, görünümlerden modellere yapılan referansların zayıf olduğundan emin olun. Görünümler reddedildiğinde güçlü referansları temizlemek için MVVMCross tarafından sağlanan (`` kayboldu '') sağlanan yaşam döngüsü yöntemlerini kullanın. Ayrıca, ilişkili görünümleri gezinme yığınından kaldırıldığında görünüm modellerinin doğru bir şekilde dağıtıldığını doğrulamak için bellek grafik aracını kullanın.

MVVMCross'ta Tutma Döngülerini Tanımlama Örneği

Diyelim ki bir `myView` `myViewmodel '' var. `MyView`` myViewModel` için güçlü bir referans tutarsa ​​ve `myViewModel '' MyView '' e (belki de bir delege veya kapatma yoluyla) güçlü bir referans tutarsa, her iki nesneyi de` myView '' den uzaklaştıktan sonra bile bellekte kaldığını görürsünüz. Bellek grafik aracını kullanarak, bu döngüyü tanımlar ve ardından gerektiğinde zayıf referansları kullanmak için kodunuzu değiştirirsiniz.

Bu adımları izleyerek ve bellek grafik aracını kullanarak, mvvmcross uygulamalarındaki tutma döngülerini etkili bir şekilde tanımlayabilir ve çözebilirsiniz, bu da uygulamanızın bellek kullanımının verimli ve kararlı kalmasını sağlar.

Alıntılar:
[1] https://doordash.engineering/2019/05/22/ios-mould-leaks-and-seain-cycle-detection-using-xcodes-Memory-graph-debugger/
[2] https://careersatdoordash.com/blog/ios-mory-reaks-and-re-teain-cycle-detection-using-ususing-ususing-ususing-ususing-ususing-ususing-susing
[3] https://www.tothenew.com/blog/memory-leak-with-graph-debugger/
[4] https://paul-samuels.com/blog/2018/11/20/unit-testing-re-teain-cycles/
[5] https://www.mvvmcross.com/mvvmcross-5-reelease/
[6] https://stackoverflow.com/questions/54040726/mvvmcross-android-ephears-to-ebe-keep hold-of-viewmodels-and-never-nisposing-w
[7] https://www.donnywals.com/using-xcodes
[8] https://www.mvvmcross.com/mvvmcross-6.0.0-release/
[9] https://stackoverflow.com/questions/41660486/know-where-reetain-cycles-are-emoving-them