Kingfisher
ima1.kf.setImage(with: url)
为了兼容macOS, IOS
通过协议定义了kf,实际上就是本身
KingfisherOptionsInfo
可以配置一些设置
eg:只从内存中取,内存中没有就直接下载
eg:直接下载最新的
1内存中,2磁盘中,下载最新的缓存到内存和磁盘
存在磁盘中的是image转成的data
在内存中存的的是NSCache
1.NSCache类结合了各种自动删除策略,以确保不会占用过多的系统内存
如果其它应用需要内存时,系统自动执行这些策略
当调用这些策略时,会从缓存中删除一些对象,以最大限度减少内存的占用。
2.NSCache是线程安全的,我们可以在不同的线程中添加、删除和查询缓存中的对象,而不需要锁定缓存区域。
不像NSMutableDictionary对象,一个缓存对象不会拷贝key对象。
NSCache [key:value(StorageObject对象里边有属性key,属性value)]
怎么就存在内存里了
通过一个单利对象存储,单利中有属性memoryStorage,里边有个NSCache
KingfisherManager.shared
1.增加了一个清楚内存缓存的策略
通过一个定时器定期清除过期的缓存,默认为2分钟(可以设定)清理一次
删除缓存时间大于5分钟(可以设定)的对象,保证了一个对象在内存中存在时间是5到7分钟
2.默认的缓存对象最大个数是无限大
3.内存大小的celue
// Bitmap memory cost with bytes. 计算每个图片的大小B
var cost: Int {
let pixel = Int(size.width * size.height * scale * scale)
guard let cgImage = cgImage else {
return pixel * 4
}
return pixel * cgImage.bitsPerPixel / 8
}
最大占用内存数totalCostLimit 是 物理内存的1/4
let totalMemory = ProcessInfo.processInfo.physicalMemory
let costLimit = totalMemory / 4
二 disk磁盘中缓存策略
每次进入后台时,和将要推出应用时 清理7天(可以设置)之前的缓存,如果缓存大于设定值的最大值则删除最早缓存的data
磁盘中存取的是data
有关其中的缓存的key 是url 如果url中不包含具体图片的名称,但后台更改图片但是url地址不变时不会加载中新图片
在cell中的label设置为自适应,设置好约束,tableView代理方法中不要给cell高度,cell的高度会根据label文字的高度确定