- 1.1 沙盒的根目录下有三个常用的文件夹:
- 1.2 Library文件夹
- 1.3 tmp文件夹
- 1.4 standardUserDefaults 的使用
- 2.1 把字典对象 持久化保存到文件中
- 2.2 存储自定义类型对象到NSUserDefaults
- 3.1 基本用法
- 3.2 例子:创建一个处理数据库的工具类
- 3.3 数据库缓存性能进行优化
- 3.4 测试验证
前言
一般通过以下两种方式使用磁盘缓存: ·文件缓存 ·数据库缓存(一般是指在SQLite数据库)
对于写入性能,SQLite数据库优于文件缓存;对于读取性能,情况稍微复杂一些。
- 当每页缓存容量在8192B到16384B之间时,数据库拥有最好的读写性能。
- 如果单条数据小于100KB时,则从SQLite数据库中读取数据速度更快;单条数据大于100KB时,则从文件中读取速度更快。
I 沙盒
我们都知道,iOS系统为了保证系统的安全性,采用了沙盒机制(即每个应用程序都会有自己的一个独立存储空间)。
其原理是通过重定向技术,把应用程序生成和修改的文件重定向到自身文件夹中。
因此,在iOS应用程序里,磁盘缓存的数据一般都存储在沙盒中。
- 获取沙盒路径
NSString *homeDir = NSHomeDirectory();
1.1 沙盒的根目录下有三个常用的文件夹:
- Document: 保存的一般是应用程序本身产生的数据
- Library
- tmp
使用NSSearchPathForDirectoriesInDomains
获取Document和Library文件夹的路径:,NSDocumentDirectory表示搜索Document,NSLibrary-Directory表示搜索Library
如果expandTilde参数为NO,即不展开路径,则返回路径如下: ~/Documents
获取tmp目录的路径需要使用NSTemporaryDirectory函数。
1.2 Library文件夹
在Library文件夹下有两个常用的子文件夹: ·Caches ·Preferences
Caches文件夹主要用来保存应用程序运行时产生的需要持久化的数据,例如通过网络请求获取的数据。
Caches文件夹下的数据,需要应用程序负责删除,并且`iTunes同步时不会保存该文件夹下的数据。
而Preferences文件夹保存的是应用程序的偏好设置,即iOS系统的设置应用会从该目录中读取偏好设置信息。因此,该目录一般不用于存储应用程序产生的数据。
1.3 tmp文件夹
tmp文件夹主要用于保存应用程序运行时产生的临时数据,使用后再将相应的文件从该目录中删除。
当应用程序不处于活跃状态时,系统也可能会清除该目录下的文件。
iTunes同步时,不会对tmp文件夹中的数据进行备份。
获取tmp文件夹路径的方法如下:
代码语言:javascript复制NSString *path = NSTemporaryDirectory();
在模拟器上,返回的路径示例:
代码语言:javascript复制/Users/wangzhuozhou/Library/Developer/CoreSimulator/Devices/9CDA0997-3FCD-433B-8FD0-DEEE9F9329ED/data/Containers/Data/Application/FB13FCEE-D25E-4183-BBF5-11DF3F371671/tmp/
通过以上综合对比发现,最适合缓存事件数据的地方,就是Library文件夹下的Caches子文件夹
1.4 standardUserDefaults 的使用
- 偏好设置的工具方法
(void)setObject:(id)value forKey:(NSString *)key{
[[NSUserDefaults standardUserDefaults] setObject:value forKey:key];
[[NSUserDefaults standardUserDefaults] synchronize];
}
(id)objectForKey:(NSString *)key{
return [[NSUserDefaults standardUserDefaults] objectForKey:key];
}
- 例子: 是否展示过版本新特性,也即是引导页
-(void)setBShowIntroduce:(BOOL)bShowIntroduce
{
// [SessionMgr Instance].strOrderAmount = bShowIntroduce;
[[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithBool:bShowIntroduce] forKey:@"bShowIntroduce"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
/**
此版本是否提示过文案
*/
-(BOOL)bShowIntroduce
{
// return [SessionMgr Instance].strOrderAmount;
NSNumber *numShowIntroduce = [[NSUserDefaults standardUserDefaults] objectForKey: @"bShowIntroduce"];
return [numShowIntroduce boolValue];
}
II、 文件缓存
使用文件缓存数据,实现起来相对比较简单,
可以使用NSKeyedArchiver类将字典对象进行归档并写入文件,也可以使用NSJSONSerialization类把字典对象转换成JSON格式字符串写入文件。
文件缓存是不够灵活的,我们很难使用更细的粒度去操作数据,比如,很难对其中的某一条数据进行读和写操。
2.1 把字典对象 持久化保存到文件中
把字典对象 持久化保存到文件中