2012-04-21 4 views
0

私はiPAD上で実行しているアプリを持っています。かなり複雑な私は言うだろう。私が今直面している主な問題は、メモリクラッシュです。いくつかのディスカッションスレッドを通過した後、私はそれを解決する方法を理解できませんでした。XCodeヒープショットが非オブジェクト増加し、メモリクラッシュが発生する

私のすべてのメモリリークは修正されています。計測器のヒープショットを監視している間、毎回1 MBのオーダーのオーダーが増加します(アプリの通常の「状態」でヘアーポットを撮ります)。ヒープショットの80%が「非オブジェクト」カテゴリに増加しています。それらのすべてが1の参照カウントを持っています。

これらの非オブジェクトメモリは私のメモリクラッシュの可能性のある理由ですか?それとも、これは唯一の症状ですか?私は根本的な原因のためにどこか別のものを探す必要がありますか?これらの原因が考えられる場合は、これらの記憶豚を撲滅する体系的な方法は何ですか?

編集:スクリーンショットが追加されました。ご覧のとおり、コードの呼び出しはありません(下部のmain()を除く)。誰かが、ref countが1のメモリ(非オブジェクト)のこの16ビットを削除するために、右側の拡張された詳細を知ることができますか?これはちょうど1つの例です。そのような何千ものものがあり、私の記憶が増えます。

enter image description here

+0

謝罪、私のイメージは、このフォーラムで私の低い評判のためにアップロードできませんでした:-)一度追加することができます。私はこの問題に数週間苦労してきました。私は進歩するにつれて私の発見と一緒に戻ってくることを約束します。 – zolio

+0

画像を追加しました(スクリーンショット) – zolio

+0

ここに問題のアップデートがあります。私はコード全体をARCに移行しました。それは多くの問題を解決しました。完全な画像を提供するために、まだメモリ豚が起こっていた。もっと深く掘り下げていくと、私のデータベース機能の1つが接続を開いたままにしていて(閉じていない)、それが原因でメモリが枯渇していることがわかりました。みんな私を助けてくれてありがとう。 – zolio

答えて

1

私はそれらがmalloc()のように、ヒープ上に割り当てられたシンプルなバッファですよね。割り当てられ、2つのヒープショット間で割り当てが解除されたすべてのものについては、スタックトレースを調べて割り当ての原因を調べます。それがあなたのコードにある場合は、あなたがそのように割り当てるものを解放していることを確認してください。

ところで、すべてのメモリ管理の問題で真のリークが発生するわけではありません。本当のリークは、あなたのコードがアドレスを失ったため、それを解放することはできません。擬似リークは、オブジェクトへの参照がまだ残っているところですが、あなたのコードは決してそれを再び使用することはありません。つまり、実際にデータを公開し、それを忘れてしまったときに、再度アクセスすることのできないデータ構造に隠してしまいました。

そうでなければ、必要でないときにオブジェクトを保持しているため、オブジェクト以外の割り当てに責任があります。

+0

すぐにお返事ありがとうございます。大部分の場合、スタックトレースは私のコードではありません(私が想定しているライブラリコード)。それを引き起こす原因を突き止めることは本当に困難です。私はそれが役立つ場合は、サンプルを投稿することができます。 – zolio

+0

WebKit/WebViewが原因です。あなたはそれらを使っていますか? –

+0

はい、あなたは正しいです。私はwebviewを使用しています。コードからwebviewを削除すると、この非オブジェクトも大幅にダウンしています。私は私のアプリでwebviewが必要です。何が原因でしょうか?何か私はさらに見ることができますか?あなたの努力にもう一度感謝します。 – zolio

関連する問題