您的位置:首页 > 其它

本地数据持久化策略小结

2016-11-16 10:44 183 查看
/*
RAM:相当于电脑的内存, RAM的大小就决定了可以运行多少个应用程序, 特点:程序运行结束, 数据丢失
ROM:相当于电脑的硬盘, ROM的大小就决定了可以存储多少图片, 视频, 音频等数据, 特点:数据一直都在, 不会丢失

数据持久化的本质:将数据保存到文件中, 将文件方法本地磁盘上, 进行数据的永久性存储
*/
/*
简单对象进行数据持久化 -- 文件读写方式
简单对象就是 字符串, 数组, 字典, 二进制数据类创建对象,
支持文件读写的类 -- 字符串类, 数组类, 字典类, 数据类,

写入文件: 对象
字符串:writeToFile:atomically:ebcoding:error:
数组, 字典, 数据: writeToFile:atomically:

读取文件:类
字符串: [NSstring stringWithContentsOfFile:encoding:error:];
数组:[NSArray arrayWithContentsOfFile:];
字典:[NSDictionary dictionaryWithContentsOfFile:];
数据:[NSData dataWithContentsOfFile:];

注意事项:对于数组, 字典这种可以存储多个元素的容器类来说, 在进行文件读取时, 必须保证所有的元素必须要是上述类型之一

优点:操作简单, 使用方便,
缺点:1.局限性:只支持四种类型, 其他不可以 -- 归档和反归档
2.不灵活:不能灵活的进行数据的增删改查操作 --
*/
/*
复杂对象:自定义类的对象
归档和反归档并不能算是持久化的方式, 只能算是一种转化工具
自定义对象(Model) -------- 归档(NSKeyedArchiver) --->NSData ---> 写入文件, 数据持久化.
读取文件 ---> NSData ---> 反归档(NSKeyedUnarchiver) ---> 自定义对象(Model)
比如:有一个已知的数组, 数组中存放30个Model对象, 如何进行持久化?
数组 ---> 归档 ---> NSData ---> 写入文件

- (void)testFilePath { //获取路径
//1.打印应用程序包路径
NSString *bundlePath = [[NSBundle mainBundle] bundlePath];
NSLog(@"%@", bundlePath);
//2.获取包中的资源路径
NSString *path1 = [[NSBundle mainBundle] pathForResource:@"320x49" ofType:@"png"];
NSLog(@"%@", path1);
/*
NSbundle:应用程序包, 包含应用程序加载所需要的资源, 以后将该包上传到AppStore, 所以对于所有的用户下载的包, 所访问到的资源都一样, 特性:只读
*/
/*
沙盒文件夹:是iOS系统针对于每一个安装到手机上的应用程序单独生成的文件夹, 存放每一个用户单独信息
Documents:用来存放数据持久的文件, 想长久存储的文件 比如:通讯录信息
Caches:用来存放缓存的图片, 视频, 音频, 小说等,
Preferences:存储用户的偏好设置, 比如:用户名, 密码是否是第一次启动
tmp:存储临时数据, 比如:下载的zip压缩包, 先放到tmp文件夹中, 然后解压之后, 将解压之后的内容放到Caches文件夹中, 然后从tmp文件夹中将zip包删除
*/
//3.打印沙盒文件夹路径
NSString *sandboxPath = NSHomeDirectory();
NSLog(@"%@", sandboxPath);
//4.获取Documents文件夹路径
//01:获取要查询的文件 -- NSDocumentDirectory -- Documents
//02:在用户域中查看文件夹
//03:是否显示详细路径
/*
该方法最初用于Mac OS平台, 后期用于iOS平台, 而对于MacOS平台来说, 可以添加多个用户, 通过该方法会将所有用户的Documents文件夹路径获取, 所以返回值是一个数组类型, 但是对于iOS平台, 最多只有一个用户, 所以路径只有一条

*/
NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
NSLog(@"documents:%@", documentsPath);
//获取Caches文件路径
NSString *cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
NSLog(@"%@", cachesPath);
//6.操作Preferences文件夹 --plistW文件
NSUserDefaults *user = [NSUserDefaults standardUserDefaults];
[user setObject:@"Fank" forKey:@"username"];
[user setObject:@"11111" forKey:@"pwd"];
[user setBool:YES forKey:@"isLogin"];
[user synchronize]; //立即将数据写入plist文件中

BOOL isLogin = [user boolForKey:@"isLogin"];
if (isLogin) {
NSLog(@"已经登录, 可以收藏");
}else {
NSLog(@"未登录, 弹出登录界面");
}
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: