0

アニメーションのシーケンスで 150 枚の画像を使用しています。

これが私のコードです。

NSMutableArray *arrImages =[[NSMutableArray alloc]initWithCapacity:0];

for(int i = 0; i <=158; i++)
{
    UIImage* image = [UIImage imageNamed:[NSString stringWithFormat:@"baby%05d.jpg",i]];
    [arrImages addObject:image];
}

babyimage.animationImages = arrImages;
[arrImages release];

babyimage.animationDuration=6.15; [babyimage startAnimating];

1分間プレイした後、コンソールにメモリ警告が表示されます。そしてクラッシュしました。画像の解像度も下げましたが、品質を向上させるために150未満にすることはできません。

メモリの問題なしでこのアニメーションを行うより良い方法はありますか? どうもありがとうございます助けてください...

4

2 に答える 2

3

それ以外の

[UIImage imageNamed:[NSString stringWithFormat:@"baby%05d.jpg",i]]

使用する

[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"baby%05d.jpg",i] ofType:nil]]

理由は、imageNamesが画像をキャッシュし、メモリ警告を解放するまで解放されないためです

編集

また、画像全体を配列に保存するのではなく、必要に応じて画像名を保存するか、何も保存しないでください。これも多くのメモリを消費します。

于 2013-01-24T09:55:10.997 に答える
0

あなたが指定していないアニメーションが何であるかはわかりません。しかし、コードを実行している場合は、次のアルゴリズムに従います。

これは、特定の時間に表示される画像が1つだけであると想定していますが、移行中に、ある意味で2つの畳み込みが発生することになります。

procedureAnimate:
    photo_1 = allocate(file_address_array[i++])
    while i < MAX_PHOTOS
        photo_2 = allocate(file_address_array[i++])
        photo_3 = allocate(file_address_array[i++])
        perform_animation(photo_1, photo_2)
        release(photo_1)
        photo_1 = photo_2
        photo_2 = photo_3
    release(last_two)

これがそのようなことをするための完璧な方法であるかどうかはわかりません。しかし、これははるかに効率的です。

(alloc / releaseログインにひどい問題がある可能性がありますが、これは午前5時14分に作業していることと一致しています)。これが機能しない場合はお知らせください。

于 2013-01-24T10:15:09.493 に答える