IOS如何异步下载和缓存用于我的应用程序的图像和视频

use*_*468 15 video caching asynchronous download ios

我有一个显示图像和视频的iphone应用程序.应用程序结构的方式大多数图像和视频将保持不变,偶尔添加一个.我想对异步下载和缓存图像和视频的最佳和最简单的方法提出意见,以便即使在应用程序退出后它们仍会存在.另外,我只关心IOS 5及更高版本.

这是我到目前为止发现的一些信息,但我仍然不清楚最好的方法是什么,以及缓存是否会持久化.

这篇关于异步图像缓存的文章(旧2009)

这篇关于NSURLCache的文章

SDWebImage(看起来很棒,但仅适用于图像)

AFDownloadRequestOperation

这似乎是一个非常常见的用例,所以我真的在寻找最佳实践和/或示例代码的引用.

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,为您的视频使用上面的代码.

  • 这对视频也有用吗?我是说,要缓存视频?请帮忙 (2认同)