Xcodeでメモリグラフデバッガーを使用することは、MVVMCrossアプリケーションで保持サイクルを識別する効果的な方法です。これがそれを行う方法に関する段階的なガイドです:
##メモリグラフデバッガーの紹介
メモリグラフデバッガーは、Xcodeの強力なツールであり、開発者がメモリの漏れを識別し、メモリ内のオブジェクト関係を視覚化することでサイクルを保持するのに役立ちます。現在のメモリ状態のスナップショットを提供し、どのオブジェクトが保持され、どのように参照されるかを示します。
##保持サイクルを識別する手順
1.アプリを実行する:XcodeでMVVMCrossアプリケーションを実行することから始めます。保持サイクルが発生する可能性があると思われるアプリの特定の部分をテストしていることを確認してください。
2。メモリグラフのデバッガーを開く:アプリが実行されたら、Xcodeのツールバーのビジュアルデバッガーとロケーションシミュレーターボタンの間にある3つのノードボタンをクリックして、メモリグラフデバッガーを開きます。これにより、アプリの現在の状態のメモリスナップショットがキャプチャされます。
3.メモリスナップショットを分析する:メモリグラフデバッガーの左パネルに、各クラスのインスタンスの数とともに、現在メモリ中にオブジェクトのリストが表示されます。そこにあるべきではないオブジェクト、または予想外に多数のインスタンスがあるオブジェクトを探してください。
4.識別サイクルを識別:左パネルからオブジェクトを選択して、参照グラフを表示します。グラフは、太字のラインとしての強い参照と、明るい灰色の線としての未知の参照(弱いまたは強い可能性がある)を示します。保持サイクルは、グラフ内のループで示され、オブジェクトが互いに扱われないように互いに参照します。
5.オブジェクトグラフをナビゲートする:保持サイクルのソースを追跡するには、複数のオブジェクトグラフをナビゲートする必要がある場合があります。漏れたオブジェクトから始めて、参照を後方に進み、それを保持している親オブジェクトを見つけます。
6.オブジェクトの検査詳細:グラフ内のノードをクリックすると、検査パネルは、そのプロパティや関係を含むオブジェクトに関する詳細な情報を提供します。これは、オブジェクトが保持されている理由を理解するのに役立ちます。
7.コアフローを繰り返します:保持サイクルを確認するには、アプリのコアフローまたは機能を数回繰り返し、各反復後にメモリスナップショットを取得します。特定のオブジェクトのインスタンスの数が時間とともに増加すると、保持サイクルを示す可能性があります。
8。保持サイクルを修正します。保持サイクルのソースを特定したら、必要に応じて弱いまたは所有されていない参照に強い参照を変更することで修正できます。たとえば、閉鎖では、「[弱い自己]」を使用して、「自己」を強くキャプチャしないようにします。
MVVMCrossのCommon保持サイクルシナリオ
MVVMCrossアプリケーションでは、ビューモデルとビューの間の強い参照のため、またはビューモデルまたはビューを強くキャプチャする閉鎖により、サイクルを保持することがよくあります。たとえば、ビューモデルがビューへの強力な参照を保持し、ビューがビューモデルへの強力な参照も保持している場合、どちらも扱うことはできません。
このようなサイクルを防ぐために、ビューが却下されたときにビューモデルが適切にクリーンアップされていることを確認してください。 `disaled()`などのMVVMCrossが提供するライフサイクル方法を使用して、リソースをリリースし、不要な参照を破ります。
これらの手順に従って、メモリグラフデバッガーでオブジェクトの関係がどのように視覚化されるかを理解することにより、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-セクション - 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/fundmentals/viewmodel-lifecycle
[9] https://digginginthecode.wordpress.com/2016/06/14/xamarin-performance-advices/