明显泄漏:png_malloc



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

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

所有这些图像都已使用声明

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

所以我认为缓存图像不应该有问题。

是否有其他人对此png_malloc分配有同样的问题?

仪器屏幕截图

*注意:我使用的是arc,在deallocation函数中动画被设置为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]];
}

为了防止以后有人偶然发现这个问题,我发现了问题。

该项目中用于动画的png是在Windows中创建的(不确定其相关性),文件格式似乎与XCode所期望的png略有不同。这将禁止释放任何png。如果您将格式转换为适用于Mac的png,它似乎可以正常工作。我是通过完成的

mogrify -type truecolormatte -format png *.png

在调整了我所有的图像后,泄漏大大减少了,一切似乎都很好。

相关内容

  • 没有找到相关文章