2009-05-24 7 views
2

私は、最初のタブがuinavigationcontrollerであるタブ付きビューを開くiphoneアプリケーションを開発しました。そのコントローラー内には、uitableviewを含むuiviewcontrollerがあります。テーブルビューには2つのアイテムがリストされています。 1つまたは他の項目を選択すると、動的に生成されたuiviewsを持つ別のuiviewcontrollerが表示されます。iPhoneのメモリ消費

ナビゲーションコントロールの上部にある「戻る」ボタンを押すと、(テーブルビューを含む)以前のuiviewcontrollerに戻り、もう一度uitableviewの2つの項目のうちの1つを選択すると、インストゥルメンツによればほぼ2Mのメモリです。これは約24Mに達するまで毎回発生し、アプリケーションがクラッシュします。

私はリークを全く登録していません。

uiviewcontrollerに割り当てられたメモリを解放するために「戻る」ボタンが押されたときに何かする必要がありますか?

+0

SQLiteを使用していますか? アプリケーションにメモリ警告が表示されていますか? これはデバイス上またはシミュレータ上で実行されていますか? – rein

+0

いいえ、私はSQLiteを使用していません。私はデータを保持するためにプロパティリストファイルを使用しています。私はメモリの警告についてはわかりません。 didReceiveMemoryWarningメソッドにいくつかのコードを追加して、どのような種類の警告を受け取るかを確認する必要があります。 私は、シミュレータと私のiPhoneデバイスの両方から私のアプリケーションを実行しています。どちらも大きなメモリ使用量を登録します –

答えて

1

ナビゲーションコントローラはスタックにプッシュされたすべてのビューコントローラを保持しているので、そのようなビューコントローラがオートレリースされているか、そうでなければそれらにクレームを持たない(alloc、push、releaseなど)ポップ時。

これを実行していてもメモリが失われている場合は、カスタムビューをビューコントローラからオーバーラップさせている可能性があります。

コードを見ることなく言うのは難しいですが、便利なことは、すべてのUIViewController上に-didReceiveMemoryWarningを実装し、その詳細を記録することです。次に、ビューコントローラからのメモリ警告が表示されたら、割り当てを解除すると、さらに調査するための出発点があります。

また、Clang Static Analyzerを試しましたか? Leaksツールは便利ですが、多くの偽陰性があります。 CSAは万能薬ではありませんが、漏れミスを食い止めます。

2

あなたはiPhone開発でどのくらいの距離か、メモリ管理についてどれだけ知っているのかはよくわかりませんが、参照カウントの問題になる可能性があります。注意:allocまたはretainを呼び出す場合は、releaseを呼び出す必要があります。

関連する問題