使用UIImage的大型NSArray时的内存问题

时间:2013-04-17 02:26:53

标签: iphone ios xcode uiimage nsarray

我正在尝试使用UIImages数组在屏幕上显示大量图像。目前我将每个图像添加到NSMutableArray中,然后在需要时访问它们,但随着图像数量的增加,应用程序最终会崩溃。

我尝试使用Instruments来计算内存分配,一旦内存达到20MB左右,应用程序就会崩溃。有办法解决这个问题吗?或者在我这样做时尽可能多地节省内存?即使你没有这个答案,有没有人遇到过类似的问题?如果是这样,你是如何妥协/解决的?

顺便说一下,我没想到存储和从文件(或核心数据)中检索一个选项,因为应用程序需要快速使用图像,我的印象是写入/读取核心数据或文件与使用内存相比,iOS上的速度很慢(如果我错了请纠正我)

2 个答案:

答案 0 :(得分:3)

是的,如果您将大量图像存储在可变数组中,那么它会占用大量可用内存。您也可以考虑核心数据。但是,在存储和从核心数据中检索数据的运行时会发生一些缓慢的功能,但它可以安全地防止内存使用 我总是建议并使用以下功能来实现这种情况。我将所有图像缓存在文档目录中,并将其URL(文件位置)路径保存在coredata(或任何其他数据库)中。现在,在演示时,我从存储当前图像,前一图像和下一图像中拍摄了3张图像。每当我显示当前图像时,用户可以滚动并且他可以平滑地看到下一个或上一个图像。如果用户移动下一张图像,那么我将更改这三张图像。当前图像将是我以前的图像,下一个图像将是我当前的图像,我从我的存储位置加载新图像,这将是下一个图像。因此,所有图像都在循环中,我们只使用3个图像处理此循环。

答案 1 :(得分:1)

我遇到了同样的问题。尝试了不同的东西,最终点击存储一组NSData对象并动态转换为UIImage。

for (NSString *imageFile in directoryList) {
    NSString *fileLocation = [imageFolder stringByAppendingPathComponent:imageFile];
    NSData *imageData = [NSData dataWithContentsOfFile:fileLocation];
    if (imageData) {
        [images addObject:imageData];
    } else {
        [Util trace:@"cannot get image data for image named: %@", fileLocation];
    }

然后更新您的图片:

 -(void)updateImageView:(id)sender
{       
    UIImage *anImage = [UIImage imageWithData:[images safeObjectAtIndex:nextImage] ];
    [imageView setImage:anImage];
    nextImage++;
}