2011-01-18 11 views
3

これはiOS上にあり、デバイスはiPadです。ここでメモリリークを見つける手助け(一般的なヒント)

は何が起こるかです:

  1. 私は、デバイスまたはデバッグでアプリを実行するとXcodeを使用して実行します。
  2. 5分後、私は分後、私は2
  3. 他分後、Program received signal: “0”.

私はリークを使用して漏れをチェックレベルのメモリの警告を受け取るレベル1

  • のメモリの警告を受けます計測器でが漏れを検出していない。 しかし、Activity Monitorによれば、私のアプリは最初は30 MBを使い、時間がたてば100 MBを超えるサイズに成長します(約200 kb /秒!)。だから、明らかにLeaksはすべてのメモリリークを検出しません。

    私の質問:漏れが検出できない場合は、漏れを検出するための一般的なヒントはありますか?これらの漏れを見つけるには、より良いツールがありますか?

  • 答えて

    6

    1. 名前あなたは簡単に楽器でそれらを見ることができるように接頭辞を持つすべてのあなたのクラス

    2. XCode->実行 - >パフォーマンスツール - を実行します>割り当て

    ここで、アプリケーションを停止し、検索ボックスに漏れていると思われるクラスの名前を入力します。 (これは接頭辞が便利な場所です)。 「レコード」ボタンを使用して計測器を再起動する

    1. オブジェクトを割り当てると、リビング列が上下に移動するはずです。それがダウンしていない場合は、漏れがあることに注意してください。
    +0

    私はまだ私のリーク/放棄されたメモリを見つけることができないが、これは有用な方法であるようだ。 – Morrowless

    +1

    @hyn、あなたのクラスがデータを保持していて、それが漏れていない可能性があります。あなたは自動リリースプールを調べ、メモリ集中型のコードブロックを 'NSAutoReleasePool'でラップし、それが理にかなったら' [pool drain] 'を呼び出すことができます。 –

    0

    ツールを使用してリークを見つけることができますが、完全に困惑している場合は、私が使用する別のテクニックがあります。

    ほとんどすべてをコメントアウトしてから、メモリリークが再び発生するまで、一度に1つずつコンポーネントをゆっくりと戻します。そうすることで、問題を引き起こしている関数やコードブロックをゼロにすることができます。これは私がそれに近づくだろうかある

    1

    あなたが言及したケースでは、必ずしも漏れがある必要はありません。ここで言及した実行時間の点で、多くの自動リリースオブジェクトを使用している可能性があります。 コレクションオブジェクトに大きなサイズのオブジェクトを追加している可能性があります。そのような場合は、そのケースに別の自動解放プールを使用して、アプリケーションのメモリフットプリントを減らしてください。

    関連する問題