Так, інструмент графіка пам'яті в Xcode може допомогти визначити цикли утримання в програмах MVVMCross. Ось як це працює і як його можна застосувати до mvvmcross:
Розуміння циклів збереження
Зберігайте цикли виникають, коли два або більше об'єктів мають сильні посилання один на одного, заважаючи їм переміщуватися від пам'яті. Це поширена проблема в розвитку iOS, особливо при використанні делегатів або закриття, які сильно захоплюють об'єкти.
Використання інструменту графіка пам'яті
1. Запуск програми та знімання знімків: Щоб використовувати інструмент графіку пам'яті, запустіть програму MVVMCross у Xcode та навігуйтеся по його основних потоках. Здійснюйте знімки пам'яті в різні точки, особливо після навігації від переглядів або перегляду моделей, які слід розглянути.
2. Аналіз знімки: У налагоджувачі графіку пам'яті ліва панель відображає всі об'єкти, які зараз в пам'яті, а також їх кількість екземплярів. Шукайте об'єкти, які повинні були бути розведені, але все ще присутні. Збільшення кількості випадків класу з часом може вказувати на цикл утримання.
3. Ідентифікація циклів зберігання: виберіть об'єкт на лівій панелі, щоб переглянути його об'єктний графік. На графіку показані посилання, які зберігають об'єкт у пам'яті. Сміливі лінії вказують на сильні посилання, тоді як світло -сірі лінії вказують на невідомі посилання (які можуть бути слабкими або сильними). Якщо ви бачите цикл, де об'єкти сильно посилаються один на одного, це, ймовірно, цикл утримання.
4. Кріплення циклів утримання: Після того, як ви визначили цикл утримання, перегляньте свій код, щоб знайти, де створюються сильні посилання. Часто це передбачає зміну сильних посилань на слабкі посилання, особливо у делегатів чи закриття.
подання заявки на mvvmcross
У програмах mvvmcross моделі перегляду щільно поєднуються з життєвим циклом поглядів. Це іноді може призвести до збереження циклів, якщо не керуватися належним чином. Наприклад, якщо модель перегляду має сильне посилання на перегляд, а подання також має сильне посилання на модель перегляду (можливо, через прив'язку) може виникнути цикл утримання.
Щоб уникнути цього в MVVMcross, переконайтеся, що будь -які посилання з поглядів на перегляд моделей слабкі. Використовуйте методи життєвого циклу, надані MVVMcross (наприклад, `зниклим ') для очищення будь -яких сильних посилань, коли погляди відхиляються. Крім того, використовуйте інструмент графіку пам'яті, щоб перевірити, що моделі перегляду наносяться правильно, коли їх пов'язані погляди видаляються зі стека навігації.
Приклад ідентифікації циклів утримання в mvvmcross
Припустимо, у вас є `myviewmodel`, який пов'язаний з` myview`. Якщо `MyView` має сильне посилання на` MyViewModel`, і `MyViewModel` також має сильне посилання на` MyView` (можливо, через делегат або закриття), ви побачили б обидва об'єкти, що залишилися в пам'яті навіть після навігації від `MyView`. Використовуючи інструмент графіка пам'яті, ви б визначили цей цикл, а потім змінили свій код, щоб використовувати слабкі посилання, де це необхідно.
Дотримуючись цих кроків та за допомогою інструменту графіка пам'яті, ви можете ефективно визначити та вирішити цикли збереження в програмах mvvmcross, гарантуючи, що використання пам'яті вашого додатка залишається ефективним та стабільним.
Цитати:[1] https://doordash.engineering/2019/05/22/ios-memory-leaks-and-retain-cycle-detection-using-xcods-memory-graph-debugger/
[2] https://careersatdoordash.com/blog/ios-memory-leaks-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-apears-to-be-keep-hold-of-viewmodels-and-never-dissing-w
[7] https://www.donnywals.com/using-xcodes-memory-graph-to-find-memory-leaks/
[8] https://www.mvvmcross.com/mvvmcross-6.0.0-relase/
[9] https://stackoverflow.com/questions/41660486/knowing-where-retain-cycles-are-and-removing-them