• 本地数据持久化策略小结


    /*
     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
  • 相关阅读:
    PHP之十六个魔术方法详解
    PHP之十六个魔术方法详解
    让Docker容器使用静态独立的外部IP(便于集群组建)
    桥接和nat模式区别
    使用 GitHub / GitLab 的 Webhooks 进行网站自动化部署
    docker gitlab
    docker gitlab安装
    docker ui管理工具
    docker 批量删除容器
    Scrapy设置代理
  • 原文地址:https://www.cnblogs.com/IT-jqm/p/datalocation.html
Copyright © 2020-2023  润新知