2012-11-28 19 views
4

我有一个应用程序与各种动画和图像。该应用程序运行约30分钟,但然后崩溃。我已经浏览过这些工具,并且我注意到每次标记堆时都会有大量的7kB png_malloc分配(大约每隔几分钟约300kB)。明显的泄漏:png_malloc

我注意到在我的泄漏中,每次首次使用动画或png时,数据似乎都有“泄漏”(虽然我对这是否是真正的泄漏表示怀疑) 。

这些图像的所有已经使用

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

,所以我不认为应该有与缓存图像的问题声明。

有没有其他人有与此png_malloc分配相同的问题?

The instruments screenshot

*注:我使用弧和动画越来越设置在释放函数nil;但是,这些不会在应用程序退出之前调用。每次动画运行时,如果只创建一次,这会造成问题吗?

编辑更多的代码:

-(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不会清零,而是在/重写。

编辑图像采集

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

你能发表更多的代码吗?不知道如何使用frameName。 – ninjaneer

+0

cachelessImageNamed的实现来自哪里? – combinatorial

+0

哎呀,我忘了我为此写了一个函数。上面编辑。 – Benny

回答

4

万一有人后绊倒在此,我发现这个问题。

这个项目中用于动画的pngs是在Windows中创建的(不确定它是多么贴切),它的文件格式似乎与XCode期望的png略有不同。这不允许任何png被释放。如果您将格式转换为Mac的png,它似乎工作正常。我这样做是通过

mogrify -type truecolormatte -format png *.png 

调整所有我的图片后,泄漏是大大降低,一切似乎运行正常。