iOS学习笔记-031.数据的读取——沙盒模型

数据的读取——沙盒模型

一、简介

iOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被称为沙盒
所有的非代码文件都要保存在此,例如图像、图标、声音、映像、属性列表、文本文件等
–1) 每个应用程序都有自己的存储空间
–2) 应用程序不能翻过自己的围墙去访问别的存储空间中的内容
–3) 应用程序请求的数据都要通过权限检测,假如不符合条件,不会被放行

二、示意图

这里写图片描述

三、沙盒目录

1.模拟器的目录

这里写图片描述

这里写图片描述

2.真机的目录

这里写图片描述

四、结构分析

1. 应用程序包(Bundle)

包含了所有的资源文件和可执行文件

2.Documents

保存应用运行时生成的 需要持久化的数据,iTunes同步设备时 会备份 该目录。例如,游戏应用可将游戏存档保存在该目录

3.Library/Caches

保存应用运行时生成的 需要持久化的数据 ,iTunes同步设备时 不会备份 该目录。 一般存储体积较大、不需要备份的非重要数据

4.Library/Preference

保存应用的所有偏好设置,iOS的设置应用会在该目录中查找应用的设置信息。iTunes同步设备时 会备份 该目录

5.tmp

保存应用运行时所需的 临时数据 ,使用完毕后再将相应的文件从该目录删除。应用没有运行时,系统也可能会清除该目录下的文件。iTunes同步设备时 不会备份 该目录

五、常用获取方式

1.获取程序的Home目录

NSString * homeStr = NSHomeDirectory();

2.获取Documents目录

//2.获取Documents目录
// 1) 要搜索的目录类型,枚举 需要使用 NSDocumentDirectory 来搜索文档目录
// 2) 要搜索的目录所在范围,通常是用户目录范围 NSUserDomainMask
// 3) 是否展开波浪号?通常使用YES
NSArray * document = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString * docmentStr = document[0];

3.获取Caches目录

 NSArray * caches = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
 NSString * cachesStr = caches[0];

4.获取Preferences目录

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

5.获取tmp目录

NSString * tmpStr = NSHomeDirectory();

6.注意

  1. 如果做数据存取方面的开发,测试工作最好在模拟器上先完成。
    因为模拟器上测试数据相对比较好查看。待所有测试工作告一段落之后,再在真机上进行测试。
  2. 在iPhone开发中,如果做文件的读写操作,通常是没有错误提示的。
    如果向一个不存在的文件夹中写文件,读写文件的方法会正常执行,并且不会报错,但是,文件不会写入!

7.路径

模拟器目录

/Users/qiwenming/Library/Developer/CoreSimulator/Devices/493ED8EA-93A2-4977-BC60-4E0BEBD637B5/data/Containers/Data/Application/AB82E409-0827-4B5A-BA61-65F8E188C8A4

========Documents目录==========
/Users/qiwenming/Library/Developer/CoreSimulator/Devices/493ED8EA-93A2-4977-BC60-4E0BEBD637B5/data/Containers/Data/Application/AB82E409-0827-4B5A-BA61-65F8E188C8A4/Documents

========Caches目录==========
/Users/qiwenming/Library/Developer/CoreSimulator/Devices/493ED8EA-93A2-4977-BC60-4E0BEBD637B5/data/Containers/Data/Application/AB82E409-0827-4B5A-BA61-65F8E188C8A4/Library/Caches

========tmp目录==========
/Users/qiwenming/Library/Developer/CoreSimulator/Devices/493ED8EA-93A2-4977-BC60-4E0BEBD637B5/data/Containers/Data/Application/AB82E409-0827-4B5A-BA61-65F8E188C8A4

真机Home目录:
/var/mobile/Applications/304D8530-98CB-4043-A208-EBF06E8ADBB9

六、目录实例

//
//  ViewController.m
//  03_UIView25_沙盒模型
//
//  Created by 杞文明 on 2016/01/07 22:47:19   星期四
//  Copyright © 2016年 杞文明. All rights reserved.
//375 667

#import "ViewController.h"

@interface ViewController (){
    UITextView * _textView;
}

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    [self creatButton];
    [self createTextView];
}

#pragma mark - 创建按钮
-(void)creatButton{
    //1.实例化
    UIButton * button = [UIButton buttonWithType:UIButtonTypeRoundedRect];

    //2.设置大小
    [button setFrame:CGRectMake(85, 600, 200, 40)];

    //3.设置文字
    [button setTitle:@"获取沙盒的地址看看" forState:UIControlStateNormal];

    //4.设置监听
    [button addTarget:self action:@selector(clickButton:) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:button];
}

#pragma mark - 创建文本控件
-(void)createTextView{
    //1.实例化
    UITextView * textView = [[UITextView alloc]initWithFrame:CGRectMake(0, 0, 375, 550)];

    //2.设置背景
    [textView setBackgroundColor:[UIColor colorWithWhite:0 alpha:0.2]];

    //3.禁止编辑
    [textView setEditable:NO];

    //4.允许数据监听
    [textView setDataDetectorTypes:UIDataDetectorTypeAll];

    //5.添加到view
    [self.view addSubview:textView];
    _textView = textView;
}

#pragma mark - 点击按钮的监听
-(void)clickButton:(UIButton*)button{
    //1.获取程序主目录
    NSString * homeStr = NSHomeDirectory();
    homeStr = [NSString stringWithFormat:@"\n\n========主目录==========\n%@",homeStr];
    NSLog(@"%@",homeStr);
    [self appendText:homeStr];

    //2.获取Documents目录
    // 1) 要搜索的目录类型,枚举 需要使用 NSDocumentDirectory 来搜索文档目录
    // 2) 要搜索的目录所在范围,通常是用户目录范围 NSUserDomainMask
    // 3) 是否展开波浪号?通常使用YES
    NSArray * document = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString * docmentStr = document[0];
    docmentStr = [NSString stringWithFormat:@"\n\n========Documents目录==========\n%@",docmentStr];
    NSLog(@"%@",docmentStr);
    [self appendText:docmentStr];

    //3.获取Caches目录
    NSArray * caches = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
    NSString * cachesStr = caches[0];
    cachesStr = [NSString stringWithFormat:@"\n\n========Caches目录==========\n%@",cachesStr];
    NSLog(@"%@",cachesStr);
    [self appendText:cachesStr];

    //4.获取Preference目录 通过NSUserDefaults类存取该目录下的设置信息

    //5.获取tmp目录
    NSString * tmpStr = NSHomeDirectory();
    homeStr = [NSString stringWithFormat:@"\n\n========tmp目录==========\n%@",tmpStr];
    NSLog(@"%@",tmpStr);
    [self appendText:tmpStr];

}

#pragma mark - 追加文本的方法
-(void)appendText:(NSString*)text{
    //1.获取textview中已经存在的文本
    NSMutableString * contentStrM = [NSMutableString stringWithString:_textView.text];

    //2.把传递进来的文本,添加到上一步获取的文本后面
    [contentStrM appendString:text];

    //3.把组装好的文本,设置到textview中
    [_textView setText:contentStrM];

    //4.让textview的视图滚动到文本的结尾
    NSRange range = NSMakeRange(contentStrM.length, 0);
    [_textView scrollRangeToVisible:range];
}
@end

七、图示

这里写图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值