预加载图片ios app

时间:2013-10-03 01:07:09

标签: ios uiimage

我有一个包含150个本地图像的应用程序(每个约500kb)。我已将它们全部加载到这样的数组中:

allPics = [[NSMutableArray alloc] init];

//NSString *imagePath;
NSArray *result = [database performQuery:@"SELECT image_path FROM validWords order by valid_word"];
for (NSArray *row in result) {
    NSString *temp = [row objectAtIndex:0];
    NSLog(@"%@", temp);
    //imagePath = temp;
    UIImage *newImage = [UIImage imageNamed:temp];

    [allPics addObject:newImage];
}

当我稍后将我的UIImageView设置为其中一个图片时,由于我读取的延迟加载,它会将我的界面挂起一秒钟。我试图让它们预先渲染,但是在我通过我的图像获得三分之一之前,我的内存使用率超过了3gb。我应该在需要时使用后台线程来渲染图像吗?当我将图像总数减少到4时,一旦所有4个渲染一次,它们之间的过渡就是无缝的。

我感谢任何提示和解决方案!

1 个答案:

答案 0 :(得分:1)

是的,我会建议一个后台线程和分页。如果用户正在查看图像7,则应加载图像,例如5,6,8和9.如果用户然后移动到图像8,则可以丢弃图像5和延迟加载图像10.这样用户应该是能够在没有大量内存或性能开销的情况下浏览图像。

然后,您还可以添加启发式,例如“如果用户正在快速分页图像,不加载任何图像,直到它们变慢”,

另一个提示是存储图像的非常低分辨率版本(例如,50kb版本)并将其存储在不同的路径上。然后,如果用户在该图像上停留一段时间,您可以向用户显示缩略图图像,并且仅在高分辨率图像中显示延迟加载。

最后,谈谈图像尺寸时要小心。 500KB是压缩还是未压缩?如果它是500KB压缩的JPeg,设备上的实际图像可能会大得多。在磁盘上具有相当均匀的颜色和相当高的压缩水平的jpg可能非常小,但是解压缩它可能是一个巨大的图像。这可能是您遇到的滞后的另一个原因。