use*_*468 15 video caching asynchronous download ios
我有一个显示图像和视频的iphone应用程序.应用程序结构的方式大多数图像和视频将保持不变,偶尔添加一个.我想对异步下载和缓存图像和视频的最佳和最简单的方法提出意见,以便即使在应用程序退出后它们仍会存在.另外,我只关心IOS 5及更高版本.
这是我到目前为止发现的一些信息,但我仍然不清楚最好的方法是什么,以及缓存是否会持久化.
SDWebImage(看起来很棒,但仅适用于图像)
这似乎是一个非常常见的用例,所以我真的在寻找最佳实践和/或示例代码的引用.
Ed *_*hin 31
下载和缓存非常简单.以下代码将异步下载和缓存.
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
});
Run Code Online (Sandbox Code Playgroud)
现在有一些特殊的UIImages使得像SDWebImage这样的库非常有价值,即使异步下载图像非常容易.当您显示图像时,iOS使用延迟图像解压缩方案,因此存在延迟.如果将这些图像放入tableView单元格,则会变得锯齿状滚动.正确的解决方案是在后台对图像进行解压缩(或解码),然后在主线程中显示解压缩的图像.
要阅读有关延迟图像解压缩的更多信息,请参阅:http://www.cocoanetics.com/2011/10/avoiding-image-decompression-sickness/
我的建议是为您的图像使用SDWebImage,为您的视频使用上面的代码.