Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Dapatkah alat grafik memori membantu mengidentifikasi siklus mempertahankan dalam aplikasi MVVMCross


Dapatkah alat grafik memori membantu mengidentifikasi siklus mempertahankan dalam aplikasi MVVMCross


Ya, alat grafik memori di Xcode dapat membantu mengidentifikasi siklus mempertahankan dalam aplikasi MVVMCross. Begini cara kerjanya dan bagaimana cara diterapkan pada mvvmcross:

Memahami siklus mempertahankan

Pertahankan siklus terjadi ketika dua atau lebih objek memiliki referensi yang kuat satu sama lain, mencegahnya dari dialokasikan dari memori. Ini adalah masalah umum dalam pengembangan iOS, terutama saat menggunakan delegasi atau penutupan yang menangkap objek dengan kuat.

Menggunakan alat grafik memori

1. Menjalankan aplikasi dan mengambil snapshot: untuk menggunakan alat grafik memori, jalankan aplikasi MVVMCross Anda di Xcode dan navigasikan melalui aliran intinya. Ambil foto memori di titik yang berbeda, terutama setelah menavigasi dari pandangan atau tampilan model yang harus dialokasikan.

2. Menganalisis Snapshot: Dalam Debugger Grafik Memori, panel kiri menampilkan semua objek yang saat ini ada dalam memori, bersama dengan jumlah instance mereka. Cari objek yang seharusnya ditangani tetapi masih ada. Peningkatan jumlah contoh kelas dari waktu ke waktu dapat menunjukkan siklus mempertahankan.

3. Mengidentifikasi Siklus Pelihara: Pilih objek di panel kiri untuk melihat grafik objeknya. Grafik menunjukkan referensi yang menyimpan objek dalam memori. Garis tebal menunjukkan referensi yang kuat, sedangkan garis abu -abu terang menunjukkan referensi yang tidak diketahui (yang bisa lemah atau kuat). Jika Anda melihat loop di mana objek saling merujuk dengan kuat, kemungkinan siklus mempertahankan.

4. Memperbaiki siklus mempertahankan: Setelah Anda mengidentifikasi siklus mempertahankan, tinjau kode Anda untuk menemukan di mana referensi yang kuat sedang dibuat. Seringkali, ini melibatkan perubahan referensi yang kuat ke referensi yang lemah, terutama pada delegasi atau penutupan.

Mendaftar ke MVVMCross

Dalam aplikasi MVVMCross, model tampilan ditambah dengan ketat ke siklus hidup. Ini kadang -kadang dapat menyebabkan siklus mempertahankan jika tidak dikelola dengan benar. Misalnya, jika model tampilan memiliki referensi yang kuat untuk tampilan, dan tampilan juga memiliki referensi yang kuat untuk model tampilan (mungkin melalui ikatan), siklus penahan dapat terjadi.

Untuk menghindari hal ini di MVVMCross, pastikan bahwa referensi dari tampilan untuk melihat model lemah. Gunakan metode siklus hidup yang disediakan oleh MVVMCross (seperti `menghilang`) untuk membersihkan referensi yang kuat ketika pandangan diberhentikan. Selain itu, gunakan alat grafik memori untuk memverifikasi bahwa model tampilan sedang dialokasikan dengan benar ketika pandangan terkaitnya dihapus dari tumpukan navigasi.

Contoh mengidentifikasi siklus mempertahankan di mvvmcross

Misalkan Anda memiliki `myviewModel` yang terikat pada` myview`. Jika `MyView` memiliki referensi yang kuat untuk` MyViewModel`, dan `MyViewModel` juga memiliki referensi yang kuat untuk` MyView` (mungkin melalui delegasi atau penutupan), Anda akan melihat kedua objek tetap dalam memori bahkan setelah menavigasi jauh dari `MyView`. Menggunakan alat grafik memori, Anda akan mengidentifikasi siklus ini dan kemudian memodifikasi kode Anda untuk menggunakan referensi lemah jika diperlukan.

Dengan mengikuti langkah -langkah ini dan menggunakan alat grafik memori, Anda dapat secara efektif mengidentifikasi dan menyelesaikan siklus mempertahankan dalam aplikasi MVVMCross, memastikan bahwa penggunaan memori aplikasi Anda tetap efisien dan stabil.

Kutipan:
[1] https://doordash.engineering/2019/05/22/ios-memory-leaks-and-retain-cycle-detection-using-xcodes-memory-graph-debugger/
[2] https://careersatdoordash.com/blog/ios-memory-weaks-and-retain-cycle-detection-using-xcodes-memory-graph-debugger/
[3] https://www.tothenew.com/blog/memory-leak-with-memory-graph-debugger/
[4] https://paul-samuels.com/blog/2018/11/20/unit-testing-retain-cycles/
[5] https://www.mvvmcross.com/mvvmcross-5-release/
[6] https://stackoverflow.com/questions/54040726/mvvmcross-android-appears-to-keep-hold-of-viewmodels-and-never-disposing-w
[7] https://www.donnywals.com/using-xcodes-memory-graph-to-find-memory-leaks/
[8] https://www.mvvmcross.com/mvvmcross-6.0.0-release/
[9] https://stackoverflow.com/questions/41660486/knowing-where-retain-cycles-are-and-removing-them