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

标签 ios swift caching image-caching kingfisher

我正在使用 Kingfisher 库来下载和缓存图像。我在实现中遇到了一些问题:

  1. 图片是否同时缓存在内存和磁盘中?

  2. 有没有只在磁盘上缓存图片的规定?

我已经阅读了多篇关于此的文章,但找不到任何解决方案。

最佳答案

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

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

ImageCache.default.maxMemoryCost = 1024 * 1024 * yourValue

1024 * 1024 * yourValue 是以百万像素为单位的全局成本(我知道这很奇怪,但它不是兆字节,而是百万像素,因为图像可以有不同的位深度等)。

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

顺便说一句,这也是您告诉 Kingfisher 永远不要使用 RAM 并且只缓存到磁盘的方式:

ImageCache.default.maxMemoryCost = 1

这将强制 Kingfisher 仅使用磁盘缓存。


如何调试

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

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

ImageCache.default.clearMemoryCache()

如果您认为某些大图像不应该在内存缓存中,您可以使用 isImageCached 进行验证:

if let result = ImageCache.default.isImageCached(forKey: imageLink) {
    print(result.cached)
    print(result.cacheType)
}

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

相关文章:

ios - 以编程方式启用按钮需要几秒钟

c++ - 在调用者内部扩展被调用者的指导原则是什么(内联-编译器优化)

ios - UITextView 不显示属性文本的属性编辑选项

ios - iOS 中的设计模式作为装饰器模式

javascript - React-native-ui-lib 是否可用于 React Native 0.60? (安卓X)

ios - UICollectionViewCell 中的 subview Controller

Swift 枚举存储属性

ios - 防止 SwiftUI 重置 @State

ios - UIWebView 仅在必要时清除缓存

hibernate - 外部缓存(例如ehcache/redis)在哪里适合w.r.t hibernate 级别1/级别2缓存?