如何清除使用Kingfisherin UITableView加载的图像的内存和磁盘缓存?

时间:2016-11-23 07:14:42

标签: ios xcode uitableview memory-management kingfisher

我需要释放使用Kingfisher提取的图像所占用的所有内存。我有一个存储大量图像的UITableView,并且还具有“加载更多”功能。

我尝试了这些措施。

在viewDidLoad()中,我正在设置缓存大小。

let cache = KingfisherManager.sharedManager.cache
cache.maxMemoryCost = 50 * 1024 * 1024
// Set max disk cache to 50 mb. Default is no limit.
cache.maxDiskCacheSize = 50 * 1024 * 1024
// Set max disk cache to duration to 3 days, Default is 1 week.
cache.maxCachePeriodInSecond = 60 * 60 * 24 * 3

在viewWillDisappear()中我清除了这个。

cache.clearMemoryCache()
// Clear disk cache. 
cache.clearDiskCache()
// Clean expired or size exceeded disk cache.
cache.cleanExpiredDiskCache()

仍然没有按预期释放内存。如果我错过了什么,请纠正我。

5 个答案:

答案 0 :(得分:10)

收到内存警告后,我清除了缓存,现在它对我来说很好用:

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
    cache.clearMemoryCache()
    cache.clearDiskCache()
    cache.cleanExpiredDiskCache()
}

Swift 4的更新:

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
    KingfisherManager.shared.cache.clearMemoryCache()
    KingfisherManager.shared.cache.clearDiskCache()
    KingfisherManager.shared.cache.cleanExpiredDiskCache()
}

答案 1 :(得分:2)

Swift 4中的KingFisher

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

答案 2 :(得分:1)

根据documentation

  

Kingfisher会在收到内存警告时清除内存缓存,并在需要时清除已过期和超过大小的缓存。通常不需要自己清理缓存。如果您希望用户对缓存有更多控制权,则存在这些方法。

答案 3 :(得分:0)

迅速5,您可以将3行换成一个。

KingfisherManager.shared.cache.clearCache()

答案 4 :(得分:0)

手动从缓存中移除图片

Kingfisher 自动管理其缓存。但是您仍然可以手动从缓存中删除某个图像:

KingfisherManager.shared.default.cache.removeImage(forKey: cacheKey)

或者,更多控制:

KingfisherManager.shared.default.cache.removeImage(
    forKey: cacheKey,
    processorIdentifier: processor.identifier,
    fromMemory: false,
    fromDisk: true)
{
    print("Removed!")
}