Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon 如何使用内存图调试器来识别MVVMCross应用程序中的保留周期


如何使用内存图调试器来识别MVVMCross应用程序中的保留周期


在Xcode中使用内存图调试器是识别MVVMCross应用程序中保留周期的有效方法。这是有关如何做的分步指南:

##记忆图调试器的简介

内存图调试器是XCode中的一个强大工具,可帮助开发人员通过可视化内存中的对象关系来识别内存泄漏并保留周期。它提供了当前内存状态的快照,显示保留了哪些对象以及如何引用它们。

##确定保留周期的步骤

1。运行您的应用程序:首先在Xcode中运行MVVMCross应用程序。确保您正在测试您怀疑可能发生保留周期的应用程序的特定部分。

2。打开内存图调试器:运行应用程序后,通过单击位于Visual Debugger和Xcode工具栏中的位置模拟器按钮之间的三节点按钮打开内存图调试器。这将捕获您应用当前状态的内存快照。

3。分析内存快照:在内存图调试器的左面板中,您将看到当前内存中的对象列表以及每个类的实例数。寻找不应该存在或意外数量的实例的对象。

4。识别保留周期:从左图中选择一个对象以查看其参考图。该图将显示强烈的引用为粗线,而未知参考(可能是弱或强)作为浅灰色线条。图表中的一个循环表示保留周期,其中对象以防止它们被划分的方式相互引用。

5。导航对象图:要跟踪保留周期的源,您可能需要浏览多个对象图。从泄漏的对象开始,然后向后遵循引用,以找到保留其的父对象。

6.检查对象详细信息:当您单击图中的节点时,检查面板将提供有关对象的详细信息,包括其属性和关系。这可以帮助您理解为什么要保留对象。

7。重复核心流:要确认保留周期,请多次重复应用程序中的核心流量或功能,每次迭代后都会拍摄内存快照。如果特定对象的实例数量随时间增加,则可能表明保留周期。

8.修复保留周期:一旦确定了保留周期的来源,就可以通过在适当的情况下将强引用更改为弱或无人参考来解决。例如,在封闭中,使用`[弱自我]``避免强烈捕捉自我''。

MVVMCross中的共同保留周期场景

在MVVMCROSS应用中,保留周期通常是由于视图模型和视图之间的强烈参考而发生的,或者是由于捕获视图模型或视图的封闭而引起的。例如,如果一个视图模型对视图有很强的参考,并且该视图还对视图模型也有很强的引用,则两者都无法划分。

为了防止此类周期,请确保视图被忽略时正确清理您的视图模型。使用MVVMCROSS提供的生命周期方法,例如`'消失()`,释放资源并破坏任何不必要的参考。

通过遵循以下步骤并了解在内存图调试器中如何可视化对象关系的方式,您可以有效地识别并修复MVVMCross应用程序中的周期。

引用:
[1] https://doordash.engineering/2019/05/22/ios-memory-leaks-and-retain-cycle-detection-using-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/ususe-xcodes-memory-graph-to-find-memory-leaks/
[7] https://moldstud.com/articles/p-swift-memory-management-tips-for-tips-retain-cycle-issues
[8] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle
[9] https://digginginthecode.wordpress.com/2016/06/14/xamarin-performance-advices/