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