iOS Cache 数据缓存
cache里的基本存储单元是cacheline即缓存行,缓存通常分为一级缓存和二级缓存,有些还有三级缓存,通常数据传递路线是硬盘到内存到二级缓存到一级缓存再到cpu寄存器,cpu读取数据时,首先会先从一级缓存那里读取,如果该数据存在的话(即cache命中),直接取出数据,这里并没有访问内存,如果数据不在一级缓存,cpu就会到二级缓存那里寻找,同样,如果存在则直接取出数据,如果不存在,那就得从内存载入该数据了,这时就需要访问一次内存,缓存就是为了提高cpu的工作效率。
三方框架SDWebImage下载图片二级缓存(既在显示图片之前会先去内存缓存中找,如果找到了就显示,如果没有就去磁盘中加载二进制数据,如果磁盘中也没有就会去下载。)的操作逻辑:
// 内存缓存(指一个字典属性)思路
/*
001 当把图片下载完成之后需要把该图片保存到内存缓存
002 在需要显示图片的时候,先检查本地的缓存中时候已经下载了该图片
003 如果缓存中有该图片,直接设置
004 如果缓存中没有改图片,此时需要去下载图片
*/
// 磁盘缓存(沙盒Caches下)思路
/*
001 当图片下载完成之后除了保存到内存缓存中之外,还需要保存一份到磁盘缓存中
002 当图片需要显示的时候,先检查内存缓存,如果内存缓存中有数据那么就直接设置
003 如果内存缓存中没有数据,那么再去检查磁盘缓存
004 如果有数据,那么就直接拿来设置就可以 | 保存一份到内存缓存中
005 如果没有数据,那么这个时候再去下载数据
*/
// 改善缓存结构(内存缓存--->二级缓存结构[内存缓存-沙盒缓存])
根据沙盒的特点 ,沙盒是逻辑存储,一重启 tmp数据没了,document 和library还在存在,所以那就说明tmp是临时的内部存储器,临时内存而document和library是外存,是存储到物理硬盘上的。(我这么理解肯定有误,待改正),tmp是一级缓存,document和library是二级缓存。
文件夹tmp属于临时存储,那么tmp文件夹里面的文件,tmp文件会在应用退出后清空。
Library基本上不会清除,但在内存不足的情况下,可能会被清除,也有一些开源库使用这个目录,一般不会有问题。