如何使用Kingfisher仅在磁盘中缓存图像?

时间:2017-05-18 13:07:37

标签: ios swift caching image-caching kingfisher

我正在使用 Kingfisher 库来下载和缓存图片。我在实施中面临一些问题:

  1. 图像是否缓存在内存和磁盘中?

  2. 是否有任何规定只在磁盘上缓存图像?

  3. 我已经阅读了多篇关于此的帖子,但无法找到任何解决方案。

3 个答案:

答案 0 :(得分:13)

是的,Kingfisher会在内存和磁盘上缓存图像。

默认情况下,将使用的RAM量甚至不受限制,您必须自己设置值:

npm i cors --save

var cors = require('cors');
app.use(cors());

res.header("Access-Control-Allow-Origin: *");

其中ImageCache.default.maxMemoryCost = 1024 * 1024 * yourValue 是百万像素的全球成本(我知道这很奇怪,但它不是兆字节,它是百万像素,因为图像可能有不同的位深度等)。

例如,在我的测试中,使用值1024 * 1024 * yourValue的最大RAM在120MB到300MB之间波动。

顺便提一下,这也是你告诉Kingfisher永远不要使用RAM而只缓存到磁盘的方法:

1024 * 1024 * 500

这将迫使Kingfisher仅使用磁盘缓存。

如何调试

首先要检查您是否在正确的缓存中设置了最大值。也许你确实创建了自定义缓存?我的示例是设置默认缓存的值,如果没有定义其他缓存,则使用该值。

您可能还想手动清除内存缓存并比较之前和之后的RAM占用:

ImageCache.default.maxMemoryCost = 1

如果您认为某个大图片在内存缓存中不应该出现,您可以使用ImageCache.default.clearMemoryCache() 进行验证:

isImageCached

答案 1 :(得分:4)

如果有人在不使用 imageView 的情况下明确下载图片和缓存相同的答案,示例代码为:

"$($matches.Type)$($matches.Number)$($_.Extension)"

参考:https://github.com/onevcat/Kingfisher/wiki/Cheat-Sheet

答案 2 :(得分:1)

Swift 5.3,Xcode 12

https://stackoverflow.com/a/44354411/10579134,以下的最新版本

ImageCache.default.memoryStorage.config.totalCostLimit = 1 //1 in bytes