4

さまざまなアニメーションと画像を含むアプリケーションがあります。アプリケーションは約 30 分間問題なく動作しますが、その後クラッシュします。インストゥルメントを調べたところ、ヒープをマークするたびに 7kB のpng_malloc割り当てが大量に作成されていることがわかりました (数分ごとに約 300kB になります)。

アニメーションまたはが初めて使用されるたびに、データの「リーク」があるように見えることにリークで気付きましたpng(ただし、これが実際のリークであるかどうかについては少し懐疑的です)。

これらの画像はすべて、次を使用して宣言されています

frameName = [[NSString alloc] initWithFormat:@"image.png"];
UIImage * u = [UIImage cachelessImageNamed:frameName];

したがって、画像のキャッシュに問題があるとは思いません。

他の誰かがこのpng_malloc割り当てで同じ問題を抱えていましたか?

楽器のスクリーンショット

*注意: 私はアークを使用しており、アニメーションはnil割り当て解除機能で設定されています。ただし、これらはアプリケーションが終了するまで呼び出されません。一度しか作成されていない場合、アニメーションが実行されるたびに問題が発生しますか?

EDITいくつかのコード:

-(void) createSymbolAnimations
{
    if (symbolAnimations == nil)
    {
        symbolAnimations = [[NSMutableArray alloc]init];
    }
    NSString * frameName;

    if (thisAnimation == nil)
    {
         thisAnimation = [[NSMutableArray alloc] init];
    }
    for (int x= 0; x< 40; x++)
    {
        frameName = [[NSString alloc] initWithFormat:@"image%d%s",x,".png"];
        UIImage * u = [UIImage cachelessImageNamed:frameName];
        [thisAnimation addObject:u];
    } 
    [symbolAnimations addObject:thisAnimation];
}

アニメの創作です。これらのいくつかがあり、次にアニメーション セットを変更し、このスニペットでタッチでアニメーションを開始すると想像してください。

UIImageView * aView = [frameArray objectAtIndex:x];        
aView.image = [[symbolAnimations objectAtIndex:x]objectAtIndex:0];
[aView startAnimating];

xアニメーション化したい一連の画像はどこ0にあり、アニメーションの最初のフレームです。

そのため、画像はかなりの回数変更され、アニメーション画像が変更されるたびにRAMがクリアされずに上書き/書き換えられるのではないかと心配し始めています.

EDIT画像グラバー

+(UIImage *) cachelessImageNamed: (NSString *) name
{
    return [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:name ofType:nil]];
}
4

1 に答える 1

4

後で誰かがこれに出くわした場合に備えて、私は問題を見つけました。

このプロジェクトでアニメーションに使用される png は Windows で作成されたものであり (それがどれほど適切かはわかりません)、ファイル形式は XCode が想定している png とは少し異なるようです。これにより、png の割り当てが解除されなくなります。Mac 用の png 形式に変換すると、問題なく動作するようです。私はこれをやりました

 mogrify -type truecolormatte -format png *.png

すべての画像を調整した後、リークは大幅に減少し、すべて正常に動作しているようです.

于 2013-01-23T00:41:41.550 に答える