iOS学习12--沙盒

      Go ahead!今晚将回顾一下iOS的沙盒机制以及使用。


1、沙盒的说明:

iOS 应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被称为沙盒
iOS 常用目录:
Bundle
Documents
Library/ Caches
Library/ Preference
tmp


2、沙盒的结构分析

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


3、获取上面文件结构的目录

获取程序的 Home 目录

NSString*home= NSHomeDirectory();


获取 Documents 目录

// NSUserDomainMask代表从用户文件夹下找

// YES 代表展开路径中的波浪字符~”

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

// 只有一个匹配目录,所以这个集合里面只有一个元素

NSString *doc= documents[0];

// 使用字符串拼接的方式获取目录名

NSString*doc2= [home stringByAppendingPathComponent:@"Documents"];



获取 Cache 目录

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

NSString*cache = caches[0];

Preferences 目录

通过NSUserDefaults类存取该目录下的设置信

获取 Tmp 目录

NSString *tmpDir = NSTemporaryDirectory();


上面的几个目录,直接NSLog输出就可以看到对应的路径,根据打印的路径进入电脑的路径,找到对应的位置即可。


4、下面就对文件进行简单的操作,立即post代码。

    NSError *error;
    
    NSLog(@"Home:%@",NSHomeDirectory());//获取根目录
    
    NSFileManager *fileMgr = [NSFileManager defaultManager];//定义一个文件管理器
    
    NSString *documentDirectory = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
    
    NSLog(@"Doucument path : %@",documentDirectory);
    //使用文件管理器创建一个文件
    [fileMgr createDirectoryAtPath:[NSString stringWithFormat:@"%@/myFolder",NSHomeDirectory()] withIntermediateDirectories:NO attributes:nil error:&error];
    //一步步获取路径
    NSString *myFolder = [NSHomeDirectory() stringByAppendingPathComponent:@"myFolder"];
    NSLog(@"myFolder:%@",myFolder);
    
    
    NSString *filePath = [myFolder stringByAppendingString:@"file-1.txt"];
    NSString *str1 = @"i love you ,apple";
    //上面获取文件路径之后,就向文件写入一些数据
    [str1 writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:&error];
    //读取刚才写入的数据,验证是否正确
    NSString *readStr = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:&error];
    
    NSLog(@"what you read: %@",readStr);
    
    /*
        序列化数据写入到plist文件当中
     
     */
    
    // NSDictionary演练(2)
    NSString *path = [documentDirectory stringByAppendingPathComponent:@"users.plist"];
    // 将数据封装成字典
    NSMutableDictionary *dict = [NSMutableDictionary dictionary];
    [dict setObject:@"chuck" forKey:@"姓名"];
    // 转换年龄数据格式
   // NSNumber *age = [NSNumber numberWithInteger:_ageText.text.integerValue];
    [dict setObject:@(23) forKey:@"年龄"];
    [dict setObject:@"10086" forKey:@"电话"];
    // 将字典写入users.plist文件
    [dict writeToFile:path atomically:YES];
    
    //从plist文件中读取数据
    NSString *pathOfPlist = [documentDirectory stringByAppendingPathComponent:@"users.plist"];
    
    // 将plist文件加载至数据字典
    NSDictionary *dictOfPlist = [NSDictionary dictionaryWithContentsOfFile:pathOfPlist];
    
    NSLog(@"name:%@",dictOfPlist[@"姓名"]);
    NSLog(@"age:%@",dictOfPlist[@"年龄"]);
    NSLog(@"phoneNumber:%@",dictOfPlist[@"电话"]);

总结:

  除了上面使用plist文件存储序列化的数据,还可以使用Archiver来实现复杂类型数据的存储归档,比如自定义对象,而且这些自定义对象必须遵守NSCoding协议。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值