【发布时间】:2018-10-26 03:18:59
【问题描述】:
我需要在磁盘上缓存图像,但将它们限制为 20 个图像。我正在尝试Nuke 库。当我跑步时
Nuke.loadImage(with: url, options: options, into: imageView)
只要我在我的视图控制器中,图像就会被缓存。当我离开视图时,下一次将再次获取图像。那么我如何让Nuke(或其他库)保存这些图像以用于特定的图像计数或时间。
在尝试 Nuke 之前,我只是在每次获取图像时将图像保存到应用程序的 Documents 文件夹中。我相信有更好的方法。
更新:我可以通过 Kingfisher 做到这一点。
func getFromCache(id: String) {
ImageCache.default.retrieveImage(forKey: id, options: nil) {
image, cacheType in
if let image = image {
self.galleryImageView.image = image
} else {
print("Not exist in cache.")
self.loadImage()
}
}
}
private func loadImage() {
ImageDownloader.default.downloadImage(with: url, options: [], progressBlock: nil) {
(image, error, url, data) in
if let image = image {
self.galleryImageView.image = image
ImageCache.default.store(image, forKey: id, toDisk: true)
}
}
}
如果我理解正确,首先retrieveImage 从磁盘缓存中获取图像。后来从内存缓存。只有在收到内存警告时才会释放它们。我希望确实如此。上帝帮助我们。
【问题讨论】:
-
你应该检查这个库github.com/rs/SDWebImage
-
AlamofireImage 库提供了相当不错的图像缓存功能github.com/Alamofire/AlamofireImage
标签: swift caching kingfisher