1.先判断当前控件有无正在下载的任务,如果有,取消,进行现在的下载任务
2.查找缓存,优先命中缓存原则,先从缓存加载,加载顺序:内存缓存->磁盘缓存(最后也会加载到内存缓存中)
3.如果缓存没有命中,就会启动下载逻辑,进行下载逻辑的调度任务,该任务需提供接口来取消下载任务,因为operation有且只有一个任务在执行。(不能取消已调度的任务,只能取消未调度的任务)
缓存逻辑: SDWebImgCache继承了NSCache,在使用NSCache的过程 当中(数据结构存储了一份缓存),之后自己(SDWebImgCache)又存储了一份缓存:可以理解为增加缓存命中率
收到内存警告的时候,系统把NSCache缓存干掉了,这种情况可以通过SDWebImgCache中重新加载
NSCache线程安全:
1.自定义淘汰策略(双向链表是实现的)
2.key:strong
3.重写了哈希、isEqualTo (key: NSCacheKey,Entry: XXXX)
YYCache:缓存淘汰是可控的,最近最少使用淘汰缓存 LRU (也是双向链表实现的)
网友评论