さまざまなアニメーションと画像を含むアプリケーションがあります。アプリケーションは約 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]];
}