我正在使用阿拉莫火图像库来缓存下载的图像。
Code:
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
}
}
}
}
Log:
正如日志所示,第一个图像被请求,第二个图像是从缓存中获取的。无需提出额外要求,图像即可立即显示。
我希望当我重新启动应用程序时,即使是从缓存中获取的第一张图像,但Log
保持不变。我看了看Library/Caches/.../fsCachedData
图像就在那里,准备被获取。
问题:我在这里缺少什么?我需要在后续请求中从磁盘缓存中获取第一个图像。
这种方法会将图像请求保存在磁盘上,只要其缓存控制最大期限指定且有可用空间。如果您想设置自己的最大年龄,则必须设置custom NSURL缓存 as diskCache
你必须返回修改后的地方cachedResponse
in the 存储缓存响应方法。顺便说一下,内存缓存是由AutoPurgingImageCache
in the 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
}
于 2016 年 8 月 9 日更新@kishorer747:
The NSURL缓存 memoryCapacity
为零,因为我不希望将图像请求响应保存在缓存中以节省内存。应该只保存请求 url 的图像作为键AutoPurgingImageCache
在记忆中。您可以如下修改我的示例方法来设置您想要的cacheCapacity
and 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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)