表观泄漏:png_malloc

时间:2012-11-28 19:21:31

标签: ios memory-leaks png malloc

我有一个包含各种动画和图像的应用程序。该应用程序运行良好约30分钟,但随后崩溃。我查看了这些工具,并注意到每次标记堆时都会产生大量7kB png_malloc分配(每隔几分钟就会达到约300kB)。

我在漏洞中注意到,每次动画或png第一次使用时,数据似乎都会“泄漏”(虽然我有点怀疑这是否是真正的泄漏或不)。

所有这些图像都是使用

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

所以我不相信缓存图片应该有问题。

是否有其他人在此png_malloc分配时遇到了同样的问题?

The instruments screenshot

*注意:我正在使用arc,动画在释放功能中被设置为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]];
}

1 个答案:

答案 0 :(得分:4)

以防万一有人偶然发现这件事,我发现了问题。

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

做到的
 mogrify -type truecolormatte -format png *.png

调整完所有图片后,泄漏率大大减少,一切似乎都运行良好。