本地数据持久化策略小结
/* 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(@"未登录, 弹出登录界面"); } }