iOS Cache 数据缓存

2016-10-25  本文已影响485人  Loki_

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基本上不会清除,但在内存不足的情况下,可能会被清除,也有一些开源库使用这个目录,一般不会有问题。

Documents文件夹是开发者自己管理的文件目录,操作性很大,常用来作数据持久化

上一篇下一篇

猜你喜欢

热点阅读