我需要释放使用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()
仍然没有按预期释放内存。如果我错过了什么,请纠正我。
收到内存警告后,我清除了缓存,现在它对我来说很好用:
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()
}
KingFisher在斯威夫特4
KingfisherManager.shared.cache.clearMemoryCache()
KingfisherManager.shared.cache.clearDiskCache()
KingfisherManager.shared.cache.cleanExpiredDiskCache()
收到内存警告时,Kingfisher将清除内存缓存,并在需要时清除已过期和超出大小的缓存。通常不需要自己清理缓存。如果您希望用户对缓存有更多控制权,则存在这些方法。