下载和缓存非常简单。以下代码将异步下载和缓存。
NSCache *memoryCache; //assume there is a memoryCache for images or videos
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
NSString *urlString = @"http://URL";
NSData *downloadedData = [NSData dataWithContentsOfURL:[NSURL URLWithString:urlString]];
if (downloadedData) {
// STORE IN FILESYSTEM
NSString* cachesDirectory = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *file = [cachesDirectory stringByAppendingPathComponent:urlString];
[downloadedData writeToFile:file atomically:YES];
// STORE IN MEMORY
[memoryCache setObject:downloadedData forKey:urlString];
}
// NOW YOU CAN CREATE AN AVASSET OR UIIMAGE FROM THE FILE OR DATA
});
现在 UIImages 有一些特殊的东西使得像 SDWebImage 这样的库如此有价值,即使异步下载图像非常容易。显示图像时,iOS 使用惰性图像解压缩方案,因此存在延迟。如果您将这些图像放入 tableView 单元格,这将变成锯齿状滚动。正确的解决方案是在后台进行图像解压(或解码),然后在主线程中显示解压后的图像。
要了解有关惰性图像解压缩的更多信息,请参阅: http: //www.cocoanetics.com/2011/10/avoiding-image-decompression-sickness/
我的建议是为您的图像使用 SDWebImage,为您的视频使用上面的代码。