如果存在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设置所需的cacheCapacity
和cachePurgeCapacity
:
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)