Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon メモリグラフツールは、MVVMCrossアプリケーションの保持サイクルを識別するのに役立ちますか


メモリグラフツールは、MVVMCrossアプリケーションの保持サイクルを識別するのに役立ちますか


はい、Xcodeのメモリグラフツールは、MVVMCrossアプリケーションの保持サイクルを識別するのに役立ちます。これがどのように機能し、どのようにMVVMCrossに適用できるかは次のとおりです。

##理解サイクルを保持します

保持サイクルは、2つ以上のオブジェクトが互いに強い参照を保持している場合に発生し、それらがメモリから扱われるのを防ぎます。これは、特にオブジェクトを強くキャプチャする代表者または閉鎖を使用する場合、iOS開発で一般的な問題です。

##メモリグラフツールを使用します

1.アプリを実行してスナップショットを使用する:メモリグラフツールを使用するには、XcodeでMVVMCrossアプリケーションを実行し、コアフローをナビゲートします。特に、扱う必要があるビューやビューモデルから離れてナビゲートした後、さまざまなポイントでメモリスナップショットを取ります。

2。スナップショットの分析:メモリグラフデバッガーでは、左パネルにインスタンスカウントとともに、現在メモリ中に現在メモリ中にすべてのオブジェクトを表示します。扱われるべきであるがまだ存在するはずのオブジェクトを探してください。時間の経過とともにクラスのインスタンスの数が増えると、保持サイクルを示すことができます。

3.識別保持サイクル:左パネルのオブジェクトを選択して、オブジェクトグラフを表示します。グラフは、オブジェクトをメモリに保つ参照を示しています。太字の線は強い参照を示しますが、明るい灰色の線は未知の参照(弱いか強いかもしれません)を示します。オブジェクトが互いに強く参照するループが表示される場合、それはおそらく保持サイクルです。

4.固定保持サイクル:保持サイクルを特定したら、コードを確認して、強力な参照が作成されている場所を見つけます。多くの場合、これには、特に代表者や閉鎖において、弱い参照への強い参照を変更することが含まれます。

mvvmcrossへの適用

MVVMCrossアプリケーションでは、ビューモデルはビューのライフサイクルに密接に結合されています。これにより、適切に管理されていないとサイクルを保持することがあります。たとえば、ビューモデルがビューへの強力な参照を保持し、ビューがビューモデル(おそらくバインディングを介して)への強力な参照も保持する場合、保持サイクルが発生する可能性があります。

MVVMCrossでこれを回避するには、ビューからビューモデルへの参照が弱いことを確認してください。 MVVMCross(「Disabed」など)が提供するライフサイクル方法を使用して、ビューが却下されたときに強い参照をクリーンアップします。さらに、メモリグラフツールを使用して、関連するビューがナビゲーションスタックから削除されたときにビューモデルが正しく扱われていることを確認します。

##識別の例MVVMCrossのサイクルを保持します

「myview」にバインドされている「myviewmodel」があるとします。 「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-セクション - 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-to-be-keep-hold-of-viewmodels-never-disposing-w
[7] https://www.donnywals.com/using-xcodes-memory-graph-to-find-memory-leaks/
[8] https://www.mvvmcross.com/mvvmcross-6.0.0-release/
[9] https://stackoverflow.com/questions/41660486/knowing-where-retain-cycles-arn-removing-them