Использование отладчика графа памяти в XCode является эффективным способом идентификации циклов удержания в приложениях MVVMcross. Вот пошаговое руководство о том, как это сделать:
Введение в отладчик графа памяти
Отладчик графа памяти является мощным инструментом в XCode, который помогает разработчикам идентифицировать утечки памяти и сохранять циклы, визуализируя отношения объектов в памяти. Он обеспечивает снимок текущего состояния памяти, показывающий, какие объекты сохраняются и как они ссылаются.
Шаги для идентификации циклов удержания
1. Запустите приложение: запустите приложение MVVMcross в XCode. Убедитесь, что вы тестируете конкретную часть приложения, где вы подозреваете, что может произойти цикл удержания.
2. Откройте отладчик графа памяти: как только ваше приложение будет запущено, откройте отладчик графа памяти, нажав на кнопку с тремя узлами, расположенную между кнопками визуального отладчика и симулятора местоположения на панели инструментов Xcode. Это запечатлет снимок памяти текущего состояния вашего приложения.
3. Проанализируйте снимок памяти: на левой панели отладчика графа памяти вы увидите список объектов, которые в настоящее время находятся в памяти, вместе с количеством экземпляров каждого класса. Ищите объекты, которые не должны быть там или имеют неожиданно большое количество экземпляров.
4. Идентифицировать циклы удержания: выберите объект с левой панели, чтобы просмотреть его эталонный график. График будет показывать сильные ссылки в виде жирных линий и неизвестных ссылок (которые могут быть слабыми или сильными) в виде светло -серых линий. Цикл удержания обозначен петлей на графике, где объекты ссылаются друг на друга таким образом, чтобы не допустить их сделки.
5. Навигационные графики объектов: чтобы отследить источник цикла удержания, вам может потребоваться перемещаться по нескольким графам объектов. Начните с просочившегося объекта и следуйте ссылкам назад, чтобы найти родительский объект, который его сохраняет.
6. Проверьте детали объекта: когда вы нажимаете на узел на графике, панель проверки предоставит подробную информацию об объекте, включая его свойства и отношения. Это может помочь вам понять, почему объект сохраняется.
7. Повторите потоки ядра: чтобы подтвердить цикл удержания, повторите поток ядра или функцию в вашем приложении несколько раз, делая снимки памяти после каждой итерации. Если количество экземпляров конкретного объекта увеличивается с течением времени, это может указывать на цикл удержания.
8. Исправьте цикл удержания: после того, как вы определили источник цикла удержания, вы можете исправить его, изменив сильные ссылки на слабые или неудобные ссылки, где это необходимо. Например, в закрытии используйте «[слабое я]», чтобы не запечатлеть «я».
common reain gycle сценарии в mvvmcross
В приложениях MVVMcross удерживающие циклы часто возникают из -за сильных ссылок между моделями обзора и представлениями или из -за закрытия моделей представления или просмотров. Например, если модель представления содержит прочную ссылку на представление, и представление также содержит сильную ссылку на модель представления, ни один из них не может быть сделкой.
Чтобы предотвратить такие циклы, убедитесь, что ваши модели просмотра должным образом очищаются при увольнении просмотров. Используйте методы жизненного цикла, предоставленные MVVMcross, например, `fasted ()`, чтобы освободить ресурсы и нарушить любые ненужные ссылки.
Следуя этим шагам и понимая, как объектные отношения визуализируются в отладчике графа памяти, вы можете эффективно идентифицировать и исправить удержание циклов в ваших приложениях 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://forums.developer.apple.com/forums/thread/112268
[5] https://www.mvvmcross.com/mvvmcross-5-release/
[6] https://www.donnywals.com/using-xcodes-memory-graph-to-find-memory-leaks/
[7] https://moldstud.com/articles/p-swift-memory-management-tips-for-retain-cycle-issues
[8] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle
[9] https://digginginthecode.wordpress.com/2016/06/14/xamarin-performance-advices/