沙盒机制(本地存储)

在我们用Xcode创建工程的时候,无时无刻都都被记录在了本地存储里面,如何找到你所建立的工程具体在本地的哪个文档里面,我们下面,做以下步骤:
点击打开Finder -> 左上角菜单栏点击前往,进去后摁住(+Alt)->点击进入 资源库->选中 Application Support ->继续进入 iPhone Simulator ->选择 7.1(版本,或多或少) -> 再点击进入Applications -> 打开任意文件夹(所有乱码命名的文件都是我们所建立的,或建立过的工程;
里面有很多文件夹:
.app文件夹
     Bundle文件夹,Bundle包,
     存储代码和工程里面左边的所有内容
      包里面的内容在开发过程中可以修改,代码执行时不可以做任何修改。
Documents文件夹
     存储在应用程序的生命周期内所有存储的内容
library文件夹
     缓存,图片,网络加载的数据缓存
tmp
    零时性存储,用不着的即可删除掉
为了更好的,更直观的了解,我们新建工程,再工程里面,我们如同以往,建立导航控制器;


#import "MainViewController.h"

#import "Student.h"

@interface MainViewController ()


@end


@implementation MainViewController

- (void)dealloc

{

    [super dealloc];

}

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

{

    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

    if (self) {

        // Custom initialization

    }

    return self;

}


- (void)viewDidLoad

{

    [super viewDidLoad];

    // Do any additional setup after loading the view.

    [self searchAction];

    [self writeString];

    [self writeArray];

    [self readString];

    [self readArray];

    [self writeDictory];

    [self readDictory];

    [self writeDate];

    [self readDate];

    [self userDefaultsWrite];

    [self readUserDefaults];

    [self archiveObject];

    [self readArchiveObject];

}

#pragma mark 获取沙盒路径

-(void)searchAction{

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

    

    NSLog(@"%@",parths);

}


- (void)didReceiveMemoryWarning

{

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}

#pragma mark 写入字符串

-(void)writeString{

    NSArray *write = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);//获取路径

    NSString * str = [write objectAtIndex:0];

    str = [NSString stringWithFormat:@"%@%@",str,@"/text.txt"];//拼接字符串。/text.txt即文件名称和后缀名,可以任意,不需要写死

    NSString *value = @"范厨师捡肥皂";

    NSError *error = nil;//定义错误信息

    [value writeToFile:str atomically:YES encoding:NSUTF8StringEncoding error:&error];//存入信息

    if (error) {

        NSLog(@"error ===%@",error);

    }

}

#pragma mark 读取字符串

-(void)readString{

    NSArray *write = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);//获取路径

    NSString * str = [write objectAtIndex:0];

    str = [NSString stringWithFormat:@"%@%@",str,@"/text.txt"];

    NSString *value = [NSString stringWithContentsOfFile:str encoding:NSUTF8StringEncoding error:NULL];

   

    

    

    //如何在原有字符串上拼接字符串

    NSString *vlaue2 = [NSString stringWithFormat:@"%@我们",value];//读取后拼接

    [vlaue2 writeToFile:str atomically:YES encoding:NSUTF8StringEncoding error:NULL];//拼接后在写入,原文件将被覆盖掉

    NSString *vlaues = [NSString stringWithContentsOfFile:str encoding:NSUTF8StringEncoding error:NULL];//读取新数组

    NSLog(@"string ===%@",vlaues);

    

}

#pragma mark 写入数组

-(void)writeArray{

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

    NSString * str = [write objectAtIndex:0];

    str = [NSString stringWithFormat:@"%@%@",str,@"/array.txt"];

    NSArray *values = [NSArray arrayWithObjects:@"范厨师捡肥皂",@"马特吃肥皂",nil];

    

    [values writeToFile:str atomically:YES];

    

}

#pragma mark 读取数组

-(void)readArray{

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

    NSString * str = [write objectAtIndex:0];

    str = [NSString stringWithFormat:@"%@%@",str,@"/array.txt"];

    NSArray *vlaue = [NSArray arrayWithContentsOfFile:str];

    NSLog(@"array====%@",vlaue);


}

#pragma mark 写入字典

-(void)writeDictory{

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

    NSString * str = [write objectAtIndex:0];

    str = [NSString stringWithFormat:@"%@%@",str,@"/dic.txt"];

    NSDictionary *value = [NSDictionary  dictionaryWithObjectsAndKeys:@"mater",@"name",@"28",@"age", nil];

    [value writeToFile:str atomically:YES];

}

#pragma mark 读取字典

-(void)readDictory{

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

    NSString * str = [write objectAtIndex:0];

    str = [NSString stringWithFormat:@"%@%@",str,@"/dic.txt"];


    NSDictionary *value = [NSDictionary dictionaryWithContentsOfFile:str];

    NSLog(@"dictory======%@",value);

    

}

#pragma mark 二进制存储

-(void)writeDate{

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

    NSString * str = [parth firstObject];

    str = [NSString stringWithFormat:@"%@/date",str];

    NSString *value = @"Hello world";

    NSData *date =[value dataUsingEncoding:NSUTF8StringEncoding];//把字符串转换为UTF8形式的二进制格式

    [date writeToFile:str atomically:YES];

    NSLog(@"%@",date);

}

#pragma mark 二进制读取

-(void)readDate{

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

    NSString * str = [parth firstObject];

    str = [NSString stringWithFormat:@"%@/date",str];

    NSData  * data= [NSData dataWithContentsOfFile:str];

    NSString *value = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

    NSLog(@"date=====%@",value);


}

//轻量存储

#pragma mark 写入轻量存储

-(void)userDefaultsWrite{

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    [defaults setObject:@"不得不说" forKey:@"name"];

    //同步存储

    [defaults synchronize];

    

}

#pragma mark 读取轻量存储

-(void)readUserDefaults{

    NSString * value  = [[NSUserDefaults standardUserDefaults]objectForKey:@"name"];

    NSLog(@"%@",value);

}


#pragma mark复杂数据类型存储

//归档,即将自己创建的model类对象转换为二进制格式,通过二进制格式进行存储

#pragma mark 序列化

以下是我们自定义的model进行归档和解档:

在自定的model.h文件中,我们需遵行NSCoding协议,且如果我们只有name。sex。age三个属性。我们要在.m中实现如下操作:



-(instancetype)init{

    self  = [super init];

    if (self) {

        

    }

    return self;

}

//归档协议,或者序列化协议

- (void)encodeWithCoder:(NSCoder *)aCoder{

    [aCoder encodeObject:self.name forKey:@"name"];

    [aCoder encodeObject:self.sex forKey:@"sex"];

    NSNumber * num = [NSNumber numberWithInt:self.age];

    [aCoder encodeObject:num forKey:@"age"];

}

//解档,反序列化

- (id)initWithCoder:(NSCoder *)aDecoder{

    if (self = [super init]) {

        self.name = [aDecoder decodeObjectForKey:@"name"];

        self.sex = [aDecoder decodeObjectForKey:@"sex"];

        NSNumber *num = [aDecoder decodeObjectForKey:@"age"];

        self.age= [num intValue];//NSnumber强转为int

    }

    return self;

    




既而在MainUiViewController里面进行归档和解档:


-(void)archiveObject{

    Student *stu =[[Student alloc]init];

    stu.name = @"mate";

    stu.sex =@"";

    stu.age  = 38;

    

    NSArray *arr = [NSArray arrayWithObject:stu];//归档为数组


    NSData *data=[  NSKeyedArchiver  archivedDataWithRootObject:arr];

//    NSData *data=[  NSKeyedArchiver  archivedDataWithRootObject:stu];//model归档

    

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

    NSString * str = [parth firstObject];

    

    str = [NSString stringWithFormat:@"%@/date",str];

    [data writeToFile:str atomically:YES];

}

//解档,将归档后的二进制文件解档为想对应的model类的对象

-(void)readArchiveObject{

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

    NSString * str = [parth firstObject];

    str = [NSString stringWithFormat:@"%@/date",str];

    NSData  * data= [NSData dataWithContentsOfFile:str];

    //归档时数组。解档也是数组。之后取model,如果时model归档。则model解档

    

    NSArray *model =[NSKeyedUnarchiver unarchiveObjectWithData:data];

    Student *stu = [model objectAtIndex:0];


//    Student *model  = [NSKeyedUnarchiver unarchiveObjectWithData:data];

    NSLog(@"%@",stu.name);


    

}



@end



只有轻量级存储存在library中,Preferences 的第二个文件中:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值