gpt4 book ai didi

ios - 如果 Alamofire 图像中存在,则使用磁盘缓存图像

转载 作者:IT王子 更新时间:2023-10-29 05:49:58 24 4
gpt4 key购买 nike

我正在使用 AlamofireImage用于缓存下载图像的库。

代码:

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
}
}
}
}

日志:

enter image description here

如日志所示,第一个图像被请求,第二个图像从缓存中获取。无需额外请求,图像会立即显示。

我希望当我重新启动应用程序时,即使是从缓存中获取的第一张图片,但 Log 也保持不变。我查看了 Library/Caches/.../fsCachedData,图片就在那里,可以获取了。

问题:我在这里缺少什么?我需要在后续请求中从磁盘缓存中获取第一张图像。

最佳答案

这种方法将图像请求保存在磁盘上,只要它们的缓存控制最大年龄表示并且空间可用即可。如果你想设置自己的最大年龄,你必须设置 custom NSURLCache作为 diskCache,您必须在 storeCachedResponse 中返回修改后的 cachedResponse方法。顺便说一句,内存缓存由 ImageDownloader 中的 AutoPurgingImageCache 处理。使用此方法设置您的下载器:

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
}

@kishorer747 于 08/09/16 更新:

NSURLCache memoryCapacity 为零,因为我不想将图像请求响应保存在缓存中以节省内存。内存中的 AutoPurgingImageCache 应该只将图像保存为请求 url 作为键。您可以如下修改我的示例方法,为图像内存缓存设置所需的 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)

关于ios - 如果 Alamofire 图像中存在,则使用磁盘缓存图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37039877/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com