什么是翠鸟默认缓存行为?

Ahm*_*d F 4 caching ios swift kingfisher

我正在使用Kingfisher库来缓存UICollectionView单元格中的图像.

我注意到调用kf_setImage(假设调用的单元名称listCell及其ImageView调用imgMain)如下:

listCell.imgMain.kf.setImage(with: URL(string: "MY IMAGE URL"),
                             placeholder: UIImage(named: "PLACEHOLDER IMAGE"))
Run Code Online (Sandbox Code Playgroud)

做工精细,它确实缓存中的图像,并显示它时,细胞已经重新出列(向上滚动时上下,我可以直接看到图像,而无需重新下载它),但是当我拉来刷新集合视图(回忆API具有相同的确切参数,这意味着它将返回相同的图像URL)图像已被重新下载!我假设图像已经被缓存了.

为了更清楚,此链接包含描述我面临的gif图像.

那么,为什么图像再次被下载?它是Kingfisher中缓存的默认行为吗?是否有任何配置应该按照我的预期进行编辑?

我阅读了图书馆文档,但是 - 很遗憾 - 我无法找到与我所要求的相关的有用信息.

one*_*cat 9

Kingfisher默认使用整个URL作为缓存键,因此每次请求API时都必须确保图像具有非常的SAME url字符串.如果网址附加了时间戳或版本号,则缓存将失败.(例如,http://example.com/image.png?time=123并且http://example.com/image.png?time=456将被识别为两个不同的缓存键,尽管您可以从中获得相同的图像).

这是我可以为您的操作绘制的唯一案例.如果这对您来说是正确的,您可以创建一个ImageResource显式指定缓存键(应该与您的原始URL相关,但删除附加的东西):

let r = ImageResource(downloadURL: yourUrl, cacheKey: key)
imageView.kf.setImage(with: r, placeholder: yourImage)
Run Code Online (Sandbox Code Playgroud)