啊嘴  

一、沙盒机制

沙盒就是一个单独的,封闭的空间(好像后来不封闭,外面的应用程序也可以访问了),每一个应用程序都有一个这样的沙盒,用来存储相应的东西(东西:所有的非代码的东西,如图片,声音,属性列表,数据库,文本文件)(应用程序的沙盒,就是应用程序的目录)

 每一个沙盒地下都有三个文件 Documents-文档 Library(Caches,PreFerences) tmp-临时文件

Document应用程序持久化的文件都是存储在这个文件夹下的

Library/Caches 存放缓存文件 存放体积大,不太重要文件,iTunes不会存储此文件下的内容   

Library/Preferences 保存偏好设置 (不应该直接创建好设置文件)而是使用NSUserDefaults类来获得和设置应用程序的偏好(应该意思是不设置偏好,而是建立一个可以设置偏好的东西,然后让用户去设置偏好什么的)

tmp 存放零时文件,iTunes不会同步该目录,iPhone重启时(重启时会丢弃所以的tmp文件,但是当应用程序关闭时有可能会删除该应该程序下的tmp文件,该目录下的文件会被删除

 

获取文件的目录

方法:

NSString *path = NSSearchPathForDirectoriesInDomains(NSCachesDirectory(这里的参数换成其他类型的就可以获得其他类型的文件目录了), NSUserDomainMask, YES)[0]

 

tmp的文件目录获取有所不同

NSString *path = NSTemporaryDirctory();

二、简单对象的写入与读出

1、简单对象的读取和录入

字符串数据 

[NSString stringWithContentsOfFile:<#(nonnull NSString *)#> encoding:<#(NSStringEncoding)#> error:<#(NSError * _Nullable __autoreleasing * _Nullable)#>]

读取类型开头+ withContectOfFile:<#(nonnull NSString *)#> encoding:<#(NSStringEncoding)#>

写入 writeToFile:atomically:encoding:error:

不研究NSdata

 

三、文件管理器

文件管理器NSFileManager(用实例说明)把文件的位置对换,还有很多方法,慢慢看

NSString *documentpath = [self getDocument];

    NSString *pathForText = [documentpath stringByAppendingString:@"/path"];

    NSString *contentPathForText = [pathForText stringByAppendingString:@"/text.tet"];

    NSString *imageName = @"boxer_dog_72px_1165292_easyicon.net-2";

    [imageName writeToFile:contentPathForText atomically:YES encoding:NSUTF8StringEncoding error:nil];

    

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

    NSString *cachesPath = [cachesPaths objectAtIndex:0];

    NSString *textDicPath = [cachesPath stringByAppendingString:@"/textDirectroy"];

    

    NSFileManager *fileManager = [NSFileManager defaultManager];

    [fileManager moveItemAtPath:contentPathForText toPath:textDicPath error:nil];

 

文件对接器NSFileHandle

这个类必须使用NSFileManager方法来创建文件,因此在使用是必须保证文件以及存在,否则返回的都是nil

四、复杂对象的对象与读取

对于自己定义的复杂的类,我们无法通过简单的writeTOFile:进行数据的持久化,只能通过归档然后再通过writeToFile写入文件

 

 

归档 

首先,复杂对象所属的类要遵守<NSCoding>协议,然后实现协议中的两个方法

- (void)encodeWithCoder:(NSCoder *)aCoder ;序列化

-(void)initWithCoder:(NSCoder *)aDecoder;反序列化

   //创建一个NSMutableData,用于保存归档后的对象

    NSMutableData *data = [NSMutableData data];

    //创建一个归档公工具

    NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];

    Person *person = [[Person alloc] init];

    person.age = @"19";

    person.name = @"kyrie";

//    存入归档

    [archiver encodeObject:person forKey:@"p1"];

//    结束归档

    [archiver finishEncoding];

    

//    沙盒路径

    NSString *path = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];

    NSString *PersonPath = [path stringByAppendingPathComponent:@"person"];

    

    [data writeToFile:PersonPath atomically:YES];

    

    //返归档

    NSData *getdata = [NSData dataWithContentsOfFile:PersonPath];

    

//反归档工具

    NSKeyedUnarchiver *unArchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:getdata];

    Person *person2 = [unArchiver decodeObjectForKey:@"p1"];

    [unArchiver finishDecoding];

    

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

 

posted on 2016-01-30 15:24  啊嘴  阅读(180)  评论(0编辑  收藏  举报