本地数据持久化策略小结

/*
 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
原文地址:https://www.cnblogs.com/IT-jqm/p/datalocation.html