3

私のアプリは 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:が、結果は同じです。

なぜこのスパイクが起こっているのですか?そして、それを避けるために私にできることはありますか?

4

1 に答える 1

3

それらを画面に表示するには、iOS は画像を圧縮解除する必要があり、そこからスパイクが発生します。

2048 * 1536 = 3145728 ピクセル。ピクセルあたり 4 バイト、つまり 12 MB です。

于 2012-11-06T14:58:21.420 に答える