zoukankan      html  css  js  c++  java
  • iOS: 沙盒的详解和目录的获取

    沙盒的详解:

    iOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被称为沙盒

    •iOS常用目录:
    –Bundle           //该目录下的文件是用来存储应用程序包的,包中含有应用程序和素材资源
    –Documents     //该目录下的文件通常用来持久性存储数据并备份,例如归档文件
    –Library/Caches   //该目录下的文件通常用来持久性存储数据,没有对数据进行备份
    –Library/Preference //该目录下的文件用来持久性存储系统的设备信息,并对数据进行备份。
    –tmp             //一个临时文件夹,用来存储临时文件,程序一旦停止运行,所存文件的内容就会消失
     
    应用程序包路径:资源库/Developer/CoreSimulator/Devices(设备plist文件)/data/Containers/Bundle/Application(应用程序包)

    沙盒路径:资源库/Developer/CoreSimulator/Devices(设备plist文件)/data/Containers/Data/Application/(Document、Library、tmp)Library/(Caches缓存、Preferences用户偏好设置)
     
    •应用程序包:(Bundle)包含了所有的资源文件和可执行文件
    •Documents:保存应用运行时生成的需要持久化的数据,iTunes同步设备时会备份该目录。例如,游戏应用可将游戏存档保存在该目录
    •Library/Caches:保存应用运行时生成的需要持久化的数据,iTunes同步设备时不会备份该目录。一般存储体积较大、不需要备份的非重要数据
    •Library/Preference:保存应用的所有偏好设置,iOS的设置应用会在该目录中查找应用的设置信息。iTunes同步设备时会备份该目录
    •tmp:保存应用运行时所需的临时数据,使用完毕后再将相应的文件从该目录删除。应用没有运行时,系统也可能会清除该目录下的文件。iTunes同步设备时不会备份该目录
     
    沙盒目录的获取:
    1.获取home目录:

      NSString *homePath = NSHomeDirectory();

    2.获取Documents目录,有两种方式:

      方式一:通过函数的形式获取(Domains:表示一个搜索域,就是手机的存储区域) 

      NSArray *directorys = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

         NSString *documentsPath = [directorys lastObject];

      方式二:通过拼接字符串的形式获取(不建议采用字符串拼接的方式获取目录,因为新版本的操作系统可能会修改默认目录名称)

      NSString *documentsPath2 = [homePath stringByAppendingPathComponent:@"Documents"];

     
    3.获取caches缓存目录(当然也可以通过拼接字符串的形式获取,这里就不列出来了) 

      NSArray *caches = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);

         NSString *cachesPath = [caches lastObject];

    4.通过函数获取临时目录

      NSString *tmp = NSTemporaryDirectory();

    5.NSBundle对象:图片、xib、storyboard、plist文件都是放在应用程序包里的  

      NSBundle *bundle = [NSBundle mainBundle];

          //获取包中的文件的路径

         NSString *path= [bundle pathForResource:@"array" ofType:@"plist"];

         //加载包里xib文件

         NSArray *views = [bundle loadNibNamed:@"cell" owner:self options:nil];

      

    提示:获取目录不是目的,获取目录为了在该目录对文件进行操作,例如创建文件并存储数据

    6.创建文件 

      //创建文件管理对象

        NSFileManager *fm = [NSFileManager defaultManager];

        //创建文件

        const char *pt = "how are you";

        NSString *fileName = [documentsPath stringByAppendingPathComponent:@"1.txt"];

        NSData *data = [NSData dataWithBytes:pt length:strlen(pt)];

        //NSString *str = @"how are you";

        //NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];   

        if([fm createFileAtPath:fileName contents:data attributes:nil])

        {

            NSLog(@"文件创建成功");

        }

    7.读取文件

        //直接读

        NSError *error = nil;

        NSStringEncoding enc = 4/*NSUTF8StringEncoding*/;

        NSString *str2 = [NSString stringWithContentsOfFile:fileName usedEncoding:&enc error:&error];

        if(!error)

        {

            NSLog(@"str2:%@",str2);

        }

        else

        {

            NSLog(@"读取失败,%@",error);

        }

  • 相关阅读:
    [vue Debugger] sourcemap
    [vuex]持久化存储
    [vuex]字典值封装到vuex缓存
    [vue]常用指令集合
    VSCode插件集合
    [element-ui] 表格点击出现编辑效果实现
    [pdf] 插件实现pdf上传预览、打印
    [html] 特殊字符
    [element-ui] 穿梭框对象重复不添加方案
    Redis持久化
  • 原文地址:https://www.cnblogs.com/XYQ-208910/p/4822917.html
Copyright © 2011-2022 走看看