内存泄漏与iPad中的大量图像

我试图在NSArray中存储UIImage数据,实际上是60个图像,每个大小为300kb。 然后,我试图在UIImageView中为图片添加animation。

我的代码:

NSMutableArray *arr = [[NSMutableArray alloc] init]; for (int i=0; i<61; ++i) { [arr addObject:[UIImage imageNamed:[NSString stringWithFormat:@"%i.png", i]]]; } img.animationImages = arr; img.animationDuration = 1.5; img.contentMode = UIViewContentModeBottomLeft; [img startAnimating]; 

当我在iPad模拟器4.3testing它,它工作正常。
当我想在我的设备(iPad 1)上进行testing时,应用程序崩溃

注意:如果我注释下面的代码,应用程序不会崩溃: [img startAnimating];

1.可能是什么问题? 我认为这是内存问题…?
2.我可以在NSArray中存储UIImage的Loooots吗?

你的PNG文件可能有300KB,但这是一种压缩格式。

要了解图像本身的大小,您应该乘以每像素的宽度,高度和字节数。

即,如果图像的大小为1024 * 1024和RGBA模式,则图像本身在内存中的大小为4MB。 这只是一个图像。 如果你有300个,大约是120MB。

注意:这只是一个粗略的经验法则,但它给了你一个想法。

所以你应该在数组中保存path名,并且只在需要的时候加载图像,缩略图应该resize并作为文件存储在磁盘上。 不要只缩放UIImageView。

编辑:有关resize的代码的伟大的文章 。

我用另一种方式解决了应用程序崩溃问题:我试图使用简单的NSTimer 。 对于每个迭代,我将第n个图像设置为UIImageView

  • 我有UIImageView在xib文件,指向imgvariables。
 NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:.03 target:self selector:@selector(tiktak) userInfo:nil repeats:YES]; int n = 0; -(void)tiktak { n++; img.image = [UIImage imageNamed: [NSString stringWithFormat:@"Blue Menu_%i.png", n]]; if(nn == 60) nn = 0; } 

animation是惊人的。 我也在Activity Monitor中testing过,CPU使用率是6%甚至更less。

我不build议你将这么多UIImage存储在一个NSArray中,它太重了,效率太低了。 这些图像来自哪里(包,互联网,设备的画廊)?

编辑:我不知道你想如何看,但你可以用UIImages的名称构build数组,然后加载UIImage并显示它。 喜欢这个:

 for(i=0;i<60;i++){ NSString *nameOfPicture=[NSString stringWithFormat:@"picture_%d",i+1] [array addObject:nameOfPicture]; }