2017-05-07 2 views
0

私のコードで保持サイクルを修正するのに1時間を費やしました。基本的に、View Controllerは、切断後に割り当て解除されませんでした。Xcode Instrumentsは強力なデリゲートタイプの保持サイクルを検出できません。

しかし、私がInstrumentsを使用してメモリリークをチェックしていたときに、リークチェックがすべて成功しました。以下の画像をご覧ください。

Instrument Leak Checks

私はクラスのプロトコルを宣言したときに問題が、私は弱いとしてデリゲートをマークするのを忘れていた...しかし、どのように来るインスツルメンツは、このサイクルを保持気づくことができませんでしたか?

私は質問が愚かであれば、私は非常に新しいメモリ管理です。ご理解ください。ありがとう。 :)

+1

はい、強力な参照サイクル(しばしば)はリークツールでは検出されません。これらの種類の問題を見つけるためのその他のテクニックについては、http://stackoverflow.com/questions/30992338/how-to-debug-memory-leaks-when-leaks-instrument-does-not-show-them/30993476#30993476を参照してください。 – Rob

+0

@Rob素晴らしい答え!ありがとう!重複した質問を申し訳ありません。 –

答えて

0

インストゥルメントは、かなり単純な方法で漏れを検出します - インスタンスからルートコンポーネント(アプリケーションデリゲートと呼ばれます)につながる参照がない場合、インスタンスとそのインスタンスを保持するすべてのインスタンスがガベージコレクタ。したがって、親ViewControllerが別のViewController(戻ってきたはずだ)を保持していて、親ViewControllerがルートコンポーネントへの参照の連鎖にあるクラスによって保持されている場合、それはリークとはみなされません。

+0

プロファイリングの仕組みを知っていますか?あなたはリファレンス/ドキュメントを持っていますか? –

+0

@Basheer_CAD、これらの結論は私自身の経験的経験に基づいています。 –

+0

@AleksandrMedvedevは正しいです。割り当てられていないメモリリークは、メモリリークの定義です。保持サイクルを見つけるには、Instrumentsの「All Heap&Anonymous VM」の部分を調べる必要があります。ビジュアルメモリのデバッグも役立ちます。 – BergQuester

関連する問題