私のアプリは Instruments で実行され、実行中に平均で約 700 KB のライブ バイトを消費します。ただし、新しい全画面イメージをロードするたびに、メモリ割り当てが 1 秒間に約 10 MB ジャンプし、その後通常の 700 KB レベルに回復します。
これは最初のうちは問題ありませんが、数回発生すると、合計 Live Bytes が 1 MB マークの下で安定していても、メモリ警告が表示され、アプリが終了します。
なぜこれが起こっているのかを確認するために、テストプロジェクトを作成しました。これは、View Controller に次のコードのみを含むシングル ビュー アプリケーションです。
- (void)viewDidLoad
{
[super viewDidLoad];
NSString *imgFile = [[NSBundle mainBundle] pathForResource:@"00-bg" ofType:@"png"];
UIImage *img = [[UIImage alloc] initWithContentsOfFile:imgFile];
UIImageView *backgroundImageView = [[UIImageView alloc] initWithImage:img];
[img release];
[self.view addSubview:backgroundImageView];
[backgroundImageView release];
}
Instruments (Leaks) からの出力は次のようになります。
私は ARC と非 ARC の両方を試しましたが、唯一の違いはスパイクの長さです (ARC はより長くメモリを保持しているようです)。
私も両方試してみましUIImage imageNamed:
たinitWithContentsOfFile:
が、結果は同じです。
なぜこのスパイクが起こっているのですか?そして、それを避けるために私にできることはありますか?