在询问有关仪器的问题并发现我的代码出现问题后,有两个问题:
第一:为什么上面的代码在分配工具中完全符合我的要求?(分配的内存小于30 Mb)
NSMutableArray* arrayOfImages = [[NSMutableArray alloc]initWithCapacity:30];
for (int i = 0; i <= 30; i++){
NSString* path = [[NSBundle mainBundle]pathForResource:[NSString stringWithFormat:@"picture%d",i] ofType:@"png"];
UIImage* img = [[UIImage alloc]initWithContentsOfFile:path];
[arrayOfImages addObject:img];
[img release];
}
imageView.animationImages = arrayOfImages;
[arrayOfImages release];
....
imageView.animationImages = nil;
[imageView release];
但事实上,分配的内存更多。
根据开发人员文档(内存管理),我认为我做的一切都是正确的,但是在设备程序中,由于内存不足,通常会崩溃。当然,这不是完整的代码,但这里的问题是定义的。(在应用程序中有5个带动画的UIImageViews,所有这些都使用了太多的内存。)
编辑好的,是否有可能解决此类问题。使用UIImages存在内存问题?
答案 0 :(得分:1)
内存管理似乎没问题。
你确定你有0 ... 30的图像,总共31个,而不是代码在数组分配中建议的30个。
至于尺寸,31张图片需要320 * 480 * 4 * 31 = 19046400字节,最少需要18 MB。
编辑:如果你有5个,我们可能会说80多MB!
答案 1 :(得分:1)
您可以尝试在NSAutoreleasePool
函数中打包for {}
。通过创建一个巨大的86000大小的对象数组,我有同样的内存问题。我不知道为什么它有时不释放它应该。
答案 2 :(得分:0)
您正在创建31个NSImages。如果你的包中不存在picture0.png或picture30.png,你可能会遇到问题。
尝试使用i + = 5或i + = 10来查看是否能解决问题。