我有一个应用程序与各种动画和图像。该应用程序运行约30分钟,但然后崩溃。我已经浏览过这些工具,并且我注意到每次标记堆时都会有大量的7kB png_malloc
分配(大约每隔几分钟约300kB)。明显的泄漏:png_malloc
我注意到在我的泄漏中,每次首次使用动画或png
时,数据似乎都有“泄漏”(虽然我对这是否是真正的泄漏表示怀疑) 。
这些图像的所有已经使用
frameName = [[NSString alloc] initWithFormat:@"image.png"];
UIImage * u = [UIImage cachelessImageNamed:frameName];
,所以我不认为应该有与缓存图像的问题声明。
有没有其他人有与此png_malloc
分配相同的问题?
*注:我使用弧和动画越来越设置在释放函数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]];
}
你能发表更多的代码吗?不知道如何使用frameName。 – ninjaneer
cachelessImageNamed的实现来自哪里? – combinatorial
哎呀,我忘了我为此写了一个函数。上面编辑。 – Benny