我有一个NSManagedObject,其中包含存储在/var/mobile/Applications/.../.../uniqueIDforNSMO/Pictures/
通过基于NSMO的uniqueID找到这些图片,我没有问题,我有一个DataController,它将为我提取它,这是非常高效的。但是当我尝试将这些图片添加到视图时,我遇到了问题,UI被阻止了。我怀疑问题是这些图像的分辨率非常高(它们是来自iPad相机胶卷的图像)。
显示5张图片大约需要3秒钟,因此会阻止用户界面。即使只显示2个图像也会阻止该死的UI。以下是我在后台线程中添加它们的方法:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
UIImage *image = [self.photos objectAtIndex:index];
dispatch_async(dispatch_get_main_queue(), ^{
cell.imageView.image = image;
});
});
如果我在没有调度的情况下设置imageView.image,则需要更长的时间。
问题可能是图像太大了,而单元格的imageView只有150x150吗?或者是因为我最初只对图像有一个参考,所以图像的实现是缓慢的部分?
有人可以在这里提出任何建议吗?我已尝试在将图像返回到阵列之前调整图像大小并且没有帮助。
答案 0 :(得分:3)
问题是图像被延迟加载 - UIImage
仅在需要绘制时将图像加载到内存中。你可以做的是急切地将图像加载到后台线程上:
CGBitmapContextRef
UIGraphicsBeginImageContext
UIGraphicsGetImageFromCurrentImageContext
答案 1 :(得分:0)
由于它们是高分辨率图像,我建议你应该为此持久化缩略图缓存。每次生成缩略图会不必要地浪费太多的CPU时间。