1

我使用 kingfisher 从 tableview 中的 url 加载图片。在我的控制器中,我有一个用于显示图片的表格视图,一个用于重新加载带有新图片的表格视图的“下一步”按钮,以及一个用于从该视图控制器转到主视图控制器的“主页”按钮。

我使用这种代码来加载图片:

cell.imageInTableCell?.kf.setImage(with: url)

当我单击下一个按钮更新图片时,这将清除我的缓存:

ImageCache.default.removeImage(forKey: photoUrl1)

它工作得很好,我可以看到我的记忆使用的起伏。

我的问题是当我单击主页按钮时尝试清除缓存。我使用的代码如下:

ImageCache.default.removeImage(forKey: photoUrl1)

或者:

let cache = KingfisherManager.shared.cache
        cache.clearMemoryCache()
        cache.clearDiskCache()
        cache.cleanExpiredDiskCache()

或者:

ImageCache.default.clearMemoryCache()
ImageCache.default.clearDiskCache()
ImageCache.default.cleanExpiredDiskCache()

它不起作用,我没有看到我的内存使用减少。我将这些代码放在带有 touchUpInside 事件的 IBAction 中,在 prepareForSegue 和 didReceiveMemoryWarning 中,但没有任何反应。

这是我只使用下一个按钮时的内存使用情况: 在此处输入图像描述

这是我的主页按钮问题,然后用图片重新加载我的控制器,然后再次点击主页按钮等: 在此处输入图像描述

你看出什么问题了吗?

谢谢,

4

2 回答 2

0

如果你想从记忆中释放很多,(只有翠鸟兑现的)

ImageCache.default.memoryStorage.removeAll()
于 2021-12-08T16:08:15.460 回答
0

已兑现的图像不是在内存中兑现,而是在磁盘中的物理位置兑现,因此如果清除内存缓存,您将不会检测到任何内存变化,不用担心它会正常工作。

如果您希望它仅在内存中兑现,则必须使用它。

/// 如果设置,Kingfisher将只将值缓存在内存中,而不是在磁盘中。

case cacheMemoryOnly

请参阅此链接https://github.com/onevcat/Kingfisher/blob/master/Sources/KingfisherOptionsInfo.swift

于 2017-06-24T23:27:05.250 回答