首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用Kingfisher只缓存磁盘中的图像?

如何使用Kingfisher只缓存磁盘中的图像?
EN

Stack Overflow用户
提问于 2017-05-18 21:07:37
回答 3查看 10.5K关注 0票数 11

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

  1. 是否将图像同时缓存在内存和磁盘中?
  2. 是否提供仅在磁盘上缓存图像?

我已经读了很多关于这个问题的帖子,但是找不到任何解决方案。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-06-04 21:06:17

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

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

代码语言:javascript
复制
ImageCache.default.maxMemoryCost = 1024 * 1024 * yourValue

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

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

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

代码语言:javascript
复制
ImageCache.default.maxMemoryCost = 1

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

如何调试

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

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

代码语言:javascript
复制
ImageCache.default.clearMemoryCache()

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

代码语言:javascript
复制
if let result = ImageCache.default.isImageCached(forKey: imageLink) {
    print(result.cached)
    print(result.cacheType)
}
票数 20
EN

Stack Overflow用户

发布于 2018-05-31 18:31:50

如果有人想在不使用imageView的情况下显式下载图像并进行缓存,那么示例代码是:

代码语言:javascript
复制
ImageDownloader.default.downloadImage(with: imgUrl, retrieveImageTask: nil, options: [], progressBlock: nil) { (image, error, url, data) in
                    print("Downloaded Image: \(url)")
                    //cache image:
                    if let image =  image, let url = url {
                        ImageCache.default.store(image, forKey: url.absoluteString)
                    }
                }

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

票数 8
EN

Stack Overflow用户

发布于 2020-02-24 16:54:36

Swift 5.3,Xcode 12

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

代码语言:javascript
复制
ImageCache.default.memoryStorage.config.totalCostLimit = 1 //1 in bytes
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44048657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档