Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Может ли инструмент графа памяти помочь идентифицировать циклы сохраняющихся в приложениях MVVMcross


Может ли инструмент графа памяти помочь идентифицировать циклы сохраняющихся в приложениях MVVMcross


Да, инструмент графа памяти в 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-xcodes-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-appears-be-be-kephold-of-weewmodels-and-never-disposing-w
[7] https://www.donnywals.com/using-xcodes-memory-graph-to-cind-memory-leaks/
[8] https://www.mvvmcross.com/mvvmcross-6.0.0-release/
[9] https://stackoverflow.com/questions/41660486/knowing-here-retain-cycles-are-and-removing-tem