内存缓存
1. LRU:缓存内部用双向链表和NSDictionary实现LRU(least-recently-used)淘汰算法
2.缓存控制:支持多种缓存控制方法,总数量、总大小、存活时间、空闲空间
3.兼容性:API和NSCache保持一致,优化同步访问性能,用OSSpinLock保证线程安全
4.对象释放控制:对象的释放可以配置为同步和异步进行,配置在主线程和后台线程进行
5.自动清空:当收到内存警告或app进入后台,缓存可以配置为自动清空
磁盘缓存
特点:基于SQLite数据库,可以很好的支持源数据、拓展方便、数据统计速度快,容易实现LRU或其他淘汰算法。根据SQLite的真机表现,在iPhone6S 64G下,SQLite写入性能比直接写文件要高,但读取性能取决于数据大小:当单条数据小于20K时,数据越小SQLite读取性能越高;单条数据大于20K时,直接写入文件更快一点。和SQLite官网描述
[http://www.sqlite.org/intern-v-extern-blob.html](http://www.sqlite.org/intern-v-extern-blob.html)
基本一致。此外,直接从官网下载最新的SQLite源码编译,比iOS系统自带的sqlite3.dylib性能高很多。SQLite和文件存储相结合:key-value元数据保存SQLite,value数据根据大小选择SQLite或文件存储,NSURLCache选定的数据大小阈值为16K。
1.可定制性: 磁盘缓存支持自定义的归档解档方法,以支持那些没有实现 NSCoding 协议的对象。
2. 存储类型控制: 磁盘缓存支持对每个对象的存储类型 (SQLite/文件) 进行自动或手动控制,以获得更高的存取性能。