UINavigationController を使用して、かなり単純なマスター/ディテール方式で前方 (プッシュ) および後方 (ポップ) に移動する iOS アプリケーションがあります。
詳細View Controllerには、手動で追加する2つまたは3つのフルスクリーン画像があります
layer1 = [[UIImageView alloc] initWithFrame:layer1Rect];//layer1rect is a CGRect
UIImage *img1 = [[UIImage alloc]initWithContentsOfFile:imgName];//imgName is an image in the bundle
layer1.image = img1;
layer1.alpha = 1;
[self.view addSubview:layer1];
img1 = nil;
私のビューではDidUnload私は持っています
for (UIView *subview in [self.view subviews]) {
[subview removeFromSuperview];
}
layer1 = nil;
layer2 = nil;
layer3 = nil;
私が抱えている問題は、何十回も押したりポップしたりした後、メモリ警告とクラッシュが発生することです。
私はARCを使用していますが、他の場所で読んだことから、それ自体が問題の原因である可能性は低いです。
アプリを計測器 (シミュレーターではなくデバイス上) で実行すると、興味深い結果が得られます。
まず第一に、メモリ割り当てツールは、メモリ使用量が 2MB 未満であり、警告とクラッシュまでリークがないことを示しています。ポップを実行すると、詳細ビュー コントローラーのインスタンスが解放されることもわかります。
ただし、Activity Monitor を見ると、使用量が約 50MB から始まり、約 250MB でクラッシュするまで、詳細ビュー コントローラーにプッシュするたびに増加し続けます。
画像がキャッシュされているのではないかと思いましたが、キャッシュの一般的な原因である imageName: どこでも使用していません。
それで、私は何が欠けていますか?詳細ビュー コントローラーをスタックからポップしたときに、それが使用していたすべてのメモリが再び利用可能になることを確認するにはどうすればよいですか?