私は数週間から私のiPhoneアプリのメモリ問題に苦労しており、オンラインで包括的な研究にもかかわらず、まだ問題を解決することができませんでした。iPhoneメモリがビューのアンロードとデアロック解除後に解放されないのはなぜですか?
私のアプリケーションはGoogleアナリティクスAPIと通信し、メインビュー、セットアップビュー、Googleからのデータを表示するテーブルビュー(カスタムセル付き)の3つの基本ビューに基づいています。私はまた、Googleからデータを取得し、それが終了すると自分自身を殺すカスタムクラスを構築しました。すべてのデータはシングルトンデータセンターに保存されます。
すべてのビューが開始され、その後、次のように解放されています
if (self.vVisitsTabelView == nil) {
visitsTabelView *initiatevisitsTabelView = [[visitsTabelView alloc] initWithNibName:@"visitsTabelView" bundle:nil];
self.vVisitsTabelView = initiatevisitsTabelView;
[initiatevisitsTabelView release];
}
[self.navigationController pushViewController:vVisitsTabelView animated:YES];
[vVisitsTabelView release];
vVisitsTabelView = nil;
問題はそれがビューメモリが増加するごとにロードすることですが、ビューがポップされたときにdeallocが呼び出されているものの、それがメモリを解放していませんすべてのインスタンス変数が解放されています。このサイクルは何度も繰り返され(同じビューを再ロードしている間に)、メモリ消費量は非常に高くなります。使用を要求した後、私は200メガバイトのリアルメモリと320のバーチャルインストゥルメントを得ました。奇妙なことにメモリ警告が1回だけ受信されましたが、メモリが足りずにアプリケーションがクラッシュすることはなく、計測器にはリークがないことが示されています。バックグラウンドに入る前に、しかし、私は、フォアグラウンドメモリに戻ったときに戻っレベルに再利用され、メモリが徐々に他のアプリでリリースされ、使用されている背景を入力した後
(多分仮想MEMを形成します?)。このプロセスには9秒かかり、その時間はアプリがフリーズします。
この状況をどのように攻撃するか?私はどこでも調べて、すべてのガイドラインに慎重に従ってきました。
どれリードが高く評価され、私は、これがこの素晴らしい場所で私の最初の時間で、ガイドラインに従わなかった場合は...
は私を許しなさい。
ご返信ありがとうございます... ARCに移行すると、以前のバージョンのIOSと互換性がありますか? IOS 3.3と言うことができますか? – Sheni
ARCはiOS 4.3以上でしか使用できないため、iOS3とそれ以前のバージョンのiOS4のサポートを削除する必要があります。 –
retainCountは役に立たない。オブジェクトを保持しているがリリースされていないものを判別するには、allocation instrumentsを使用します。 – bbum