沙盒,数据持久化

//获取当前应用程序沙盒的路径

NSHomeDictionary();

//沙盒:在一定范围内可以随意做任何事情

//iOS的沙盒指的就是应用程序的文件操作文件夹,在文件夹内可以读写任何内容,但是完全不能访问其他应用程序的沙盒文件

//Documents:跟用户相关的一些文件,用户设置的对app的一些偏好设置,用户的一些文本信息,最好不要存储空间比较大的文件比如视频/音频等等

//Documents 目录:您应该将所有de应用程序数据文件写入到这个目录下。这个目录用于存储用户数据或其它应该定期备份的信息。 


AppName.app 目录:这是应用程序的程序包目录,包含应用程序的本身。由于应用程序必须经过签名,所以您在运行时不能对这个目录中的内容进行修改,否则可能会使应用程序无法启动。


Phone应用程序在运行之前,都必须经过iOS的签名验证。所谓签名验证,是iOS保证应用程序不会损坏、不被修改的一种手段。同时,程序中的签名也包含了开发者信息,这可以追踪程序的来源,并在一定程度上保证程序的质量。

如果一个iDevice没有越狱,那么它只能安装app store上的程序,这就是通过签名机制来保证的。相反,一个经过越狱的设备,iOS中的签名认证机制被Dev Team(破解iOS的某个团队?)从内核中分离出来,这就是为什么越狱设备可以安装非苹果认证程序。

 


//Library :给开发者使用,用来存储一些东西的文件夹

//Library目录下有两个子目录:Cashes 和 Preferences,

//Cashes:缓存文件夹,用户开过的一些图片,音频,视频,都可以存储到这个文件夹中,一般的APP清除缓存的意思就是清除这个文件夹中的所有内容;Cashes目录用于存放应用程序专用的支持文件,保存应用程序再次启动过程中的需要调用的信息


//Preference 包含应用程序的一些偏好设置文件, 给开发者存储一些内容,NSUserDefaults保存的信息都在这个文件夹中,您不应该直接创建偏好设置,应该是使用NSUserDefaults类来取得和设置应用程序的偏好


//tmp:临时文件,存储网络请求过程中的一些临时文件,在APP版本更新的同时会直接清空,保存的时程序再次启动过程中不需要的一些信息


//简单对象写入本地

简单对象 NSString NSNumber NSDictionary NSArray NSData


 //获取当前应用程序的沙盒路径

   NSString *homeDir = NSHomeDirectory();

    

    //获取Documents目录路径的方法:

    NSArray *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES)lastObject];

    //获取Caches目录路径的方法:

    NSArray *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask, YES)lastObject];

    //获取tmp目录路径的方法

    NSString *tmpDic =NSTemporaryDirectory();

    

    //获取应用程序程序包中资源文件路径的方法

    //例如获取程序包中一个图片资源(apple.png)路径的方法

    NSString *imagePath = [[NSBundlemainBundle]pathForResource:@"apple"ofType:@"png"];

   UIImage *appleImage =[[UIImagealloc]initWithContentsOfFile:imagePath];

    

    //代码中mainResource类方法用于返回一个代表应用程序包的对象



    //1. 拼接一个存储路径


    //系统提供一个函数,可以直接返回某一个沙盒文件夹的路径


    //返回值:找到的路径组成的数组,如果搜索的是系统的沙盒文件夹路径,数组中只有一个元素

    //参数1:搜索沙盒中的哪个文件夹

    //参数2:搜索的范围

    //参数3:返回的是相对路径还是绝对路径

    //NO相对路径

    //YES绝对路径,给系统看


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


   NSLog(@"%@",array);



    //获取文件路径


   NSString *docPath = [array lastObject];


    //拼接一个文件的路径


    //文件有后缀

    //加斜杠代表路径下

   NSString *txtPath = [docPath stringByAppendingString:@"/123.txt"];


    //2. 按照路径写入


    NSString *str =@"we are good ";


    //系统提供的方法

    //返回值是一个BOOL

    // 参数1: 要写入的一个路径

    //参数2: 是否对写入的文件进行写保护

    // 参数3: 编码格式

    // 参数4: 错误信息


   NSError *error = nil;


    BOOL a = [strwriteToFile:txtPath atomically:YESencoding:NSUTF8StringEncodingerror:&error];


   NSLog(@"%d", a);



   //读取

    NSString *readStr = [[NSStringalloc]initWithContentsOfFile:txtPathencoding:NSUTF8StringEncodingerror:&error];


   NSLog(@"%@",readStr);



    //数组写入本地

   NSArray *arrays = [NSArrayarrayWithObjects:@"姜哥不叫姜哥叫桐哥",@"刘姐",@"刘姥姥",nil];

    //拼一个数组保存路径

   NSString *arrPath = [docPath stringByAppendingString:@"arr.plist"];


    [arrayswriteToFile:arrPath atomically:YES];


   NSLog(@"%@", arrPath);




//复杂对象写入本地

#import <Foundation/Foundation.h>

//将数据封装的协议

//NSCoding 把一个类中的数据进行整体的编码,方便进行文件的读写操作

@interface Boss : NSObject<NSCoding>


//魔王类

@property(nonatomic,retain)NSString *name;


@property(nonatomic,retain)NSString *sex;


@property(nonatomic,retain)NSString *number;


@end


#import "Boss.h"

@implementation Boss


- (void)dealloc

{

    [_namerelease];


    [_sexrelease];


    [_numberrelease];


    [superdealloc];


}


//解码的过程起始就是初始化一个对象的过程

- (id)initWithCoder:(NSCoder *)aDecoder

{

   self = [superinit];

   if (self) {

        //每次都按照之前给定的key给给定的属性赋值

       self.name = [aDecoderdecodeObjectForKey:@"name"];

       self.sex = [aDecoderdecodeObjectForKey:@"sex"];

       self.number = [aDecoderdecodeObjectForKey:@"number"];

    }

    return self;

}


//编码的方法

- (void)encodeWithCoder:(NSCoder *)aCoder

{

    //对每个属性进行标记,对读取数据的时候进行恢复

    [aCoderencodeObject:self.nameforKey:@"name"];


    [aCoderencodeObject:self.sexforKey:@"sex"];


    [aCoderencodeObject:self.numberforKey:@"number"];


}



   Boss *boss = [[Bossalloc]init];

    boss.name =@"老管";

    boss.number =@"20";

    boss.sex =@"man";


    //将复杂对象写入本地的工具

    //参数1:要写入本地的对象

    //参数2:要写入的路径


    NSString *bossPath = [docPathstringByAppendingPathComponent:@"boss.aa"];

    //归档类

   BOOL bb = [NSKeyedArchiverarchiveRootObject:boss toFile:bossPath];


   NSLog(@"bb = %d",bb);


   NSLog(@"%@",bossPath);


    [bossrelease];


    //从本地读取数据产生一个新的复杂对象

    //archive 档案

    //反归档类

   Boss *bossReturn = [NSKeyedUnarchiverunarchiveObjectWithFile:bossPath];

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


    //[docPath hash];





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值