0

を使用して、ビューコントローラーにかなり大きな画像をたくさんロードしています

NSUInteger nimages = 0;

for (; ; nimages++) {

    NSString *nameOfImage_ = @"someName";

    NSString *imageName = [NSString stringWithFormat:@"%@%d.jpg", nameOfImage_, (nimages + 1)];

    image = [UIImage imageNamed:imageName];
    if (image == nil) {
        break;
    }

    UIImageView *imageView = [[UIImageView alloc] initWithImage:image];

    //some other stuff....

    [imageView release];
}

通常のアンロードは - (void)viewDidUnload と - (void)dealloc with self.image = nil; で行われます。[イメージリリース];

数回の「ロード」と「アンロード」の後、キャッシュはまだ元に戻せないほど大きくなっているようです!! :)

そしてアプリが落ちる…

何か案は???キャッシュを空にする方法 そしてどこに?

ありがとう

編集:

これは私が間違っていたことです。どうやら、このコードはキャッシュの問題全体を修正します。

image = [[UIImage imageNamed:imageName] autorelease];

ここでは自動解放が鍵です。

返信ありがとうございます...

4

5 に答える 5

3
image = [[UIImage imageNamed:imageName] autorelease];

これは正しくありません。メモリ管理ルールに従って、イメージを割り当てたり保持したりしていないため、イメージを解放(または自動解放)しないでください。「imageNamed」には、「alloc」、「new」、「copy」、または「retain」は含まれていません。

他の回答のいくつかが説明しているように、使用するメモリをより細かく制御したい場合は、別の方法で画像をロードする必要があります。

于 2012-05-22T21:28:05.827 に答える
1

imageNamed実際にはイメージをロードする方法はひどいものです。ロードされたイメージは、強制されない限り解放されず、永久にキャッシュに保持されます。独自のよりインテリジェントなキャッシュを実装する必要があります。simpleNSMutableDictionaryは同じ機能を提供しますが、柔軟性が高くなります。

より詳細な議論については、これを読むことができます: http://www.alexcurylo.com/blog/2009/01/13/imagenamed-is-evil/

于 2012-05-22T15:28:08.517 に答える
0

別の方法を使用してイメージを初期化します。imageNamedキャッシュします。

于 2012-05-22T15:28:31.797 に答える
0

imageNamed を使用する代わりに、imageWithContentsOfFile を使用できます: または、この記事を確認してください。

リンク 0

リンク 1

于 2012-05-22T15:30:26.783 に答える