无需使用线程。偶尔加载图像很好,问题是您不断加载图像。
从主包加载可能工作正常,因为 NSBundle 正在为您缓存图像。您可以使用NSCache自己做同样的事情。
所以代替这个:
img.image=[UIImage imageWithContentsOfFile:[[arr_images objectAtIndex:indexPath.row]valueForKey:@"Image_path"]];
执行以下操作:
static NSCache *cache = nil;
if (!cache) {
cache = [[NSCache alloc] init];
[cache setCountLimit:10]; // check how much RAM your app is using and tweak this as necessary. Too high uses too much RAM, too low will hurt scrolling performance.
}
NSString *path = [[arr_images objectAtIndex:indexPath.row]valueForKey:@"Image_path"];
if ([cache objectForKey:path]) {
img.image=[cache objectForKey:path];
} else {
img.image=[UIImage imageWithContentsOfFile:path];
[cache setObject:img.image forKey:path];
}
如果最终您确实发现需要使用线程,那么我将使用 GCD 线程来加载图像,然后将该图像插入到我在此处的示例代码中创建的同一个 NSCache 对象中。基本上使用后台线程来尝试预测哪些图像需要预加载,但允许 NSCache 决定在销毁这些图像之前将这些图像保留在 RAM 中多长时间。