如果存在Alamofire图像,则使用磁盘caching的图像

我正在使用AlamofireImage库来caching下载的图像。

码:

import UIKit import AlamofireImage class ViewController: UIViewController { @IBOutlet weak var firstImageView: UIImageView! @IBOutlet weak var secondImageView: UIImageView! let downloader = ImageDownloader() let URLRequest = NSURLRequest(URL: NSURL(string: "https://httpbin.org/image/jpeg")!) override func viewDidLoad() { super.viewDidLoad() requestFirstImage() } func requestFirstImage() { downloader.downloadImage(URLRequest: URLRequest) { response in print(response.request) print(response.response) debugPrint(response.result) if let image = response.result.value { self.firstImageView.image = image self.requestSecondImage() } } } func requestSecondImage() { downloader.downloadImage(URLRequest: URLRequest) { response in print(response.request) print(response.response) debugPrint(response.result) if let image = response.result.value { self.secondImageView.image = image } } } } 

日志:

在这里输入图像说明

由于日志显示请求的第一个图像,第二个从caching中获取。 没有额外的请求,并立即显示图像。

我期待什么时候重新启动应用程序,即使从caching中取出的第一个图像,但Log保持不变。 我看着Library/Caches/.../fsCachedData ,图像就在那里,准备好提取。

问题:我在这里错过了什么? 我需要在后续请求中从磁盘caching中获取第一个映像。

这种方法将图像请求保存在磁盘上,因为它们的caching控制最大年龄和空间可用。 如果你想设置自己的最大时间,你必须设置一个自定义的 NSURLCache作为diskCache ,你必须在storeCachedResponse方法中返回修改后的cachedResponse 。 顺便提一下,内存caching由AutoPurgingImageCache中的ImageDownloader 。 使用此方法设置您的downloader

 func diskImageDownloader(diskSpaceMB: Int = 150) -> ImageDownloader { let diskCapacity = diskSpaceMB * 1024 * 1024 let diskCache = NSURLCache(memoryCapacity: 0, diskCapacity: diskCapacity, diskPath: "image_disk_cache") let configuration = NSURLSessionConfiguration.defaultSessionConfiguration() configuration.URLCache = diskCache let downloader = ImageDownloader(configuration: configuration) UIImageView.af_sharedImageDownloader = downloader return downloader } 

更新于08/09/16 @ kishorer747:

NSURLCache memoryCapacity为零,因为我不希望将图像请求响应保存在caching中以节省内存。 在内存中, AutoPurgingImageCache通过AutoPurgingImageCache为请求url保存图像。 您可以修改我的示例方法,如下cacheCapacity ,为图像内存caching设置所需的cacheCapacitycachePurgeCapacity

 let cacheCapacity = 100 * 1024 * 1024 let cachePurgeCapacity = 60 * 1024 * 1024 let imageCache: ImageRequestCache = AutoPurgingImageCache(memoryCapacity: cacheCapacity, preferredMemoryUsageAfterPurge: cachePurgeCapacity) let downloader = ImageDownloader(configuration: configuration, imageCache: imageCache)