iOS 沙河路径

沙河路径

每个iOS 应用都有自己的沙盒路径,应用沙盒就是文件系统目录
应用沙盒文件目录:应用程序包、Document、Library(下面有Caches和Preferences )、tmp文件

  • 1、应用程序包:包含所有的资源文件和可执行文件
    //Home目录 NSString *homeDirectory = NSHomeDirectory();

  • 2、Document:保存应用运行时生成的需要持久化的数据,iTunes会自动备份该目录,苹果建议将程序中建立的或在程序中浏览到的文件数据保存在该目录下,iTunes备份和恢复的时候会包括此目录。
    //Document目录NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)

  • 3、tmp:保存应用运行时所需的临时数据,使用完毕后再将相应的文件从该目录删除。应用没有运行时,系统也有可能会清除该目录下的文件,iTunes不会同步该目录,iPhone重启时,该目录下的文件会丢失。
    //tmp目录NSString *tmpDir = NSTemporaryDirectory();

  • 4、Library:存储程序的默认设置和其他状态信息,iTunes会自动备份该目录。
    Library/Caches:存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出删除。一般存放体积比较大,不是特别重要的资源。
    //Cache目录NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES);

Library/Preferences:保存应用的所有偏好设置,iOS的Settings(设置)应用会在该目录中查找应用的设置信息,iTunes会自动备份该目录。
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);

文件操作

使用系统Foundation框架下的NSFileManager文件操作类实现,在沙河路径下需指定新建文件夹的绝对路径

  • 1、[[NSFileManager defaultManager] fileExistsAtPath:createPath]
  • 2、[[NSFileManager defaultManager] createDirectoryAtPath:createPath withIntermediateDirectories:YES attributes:nil error:nil];//创建文件夹
  • 3、[[NSFileManager defaultManager] removeItemAtPath:pathFull error:&error];
  • 4、[fileManager moveItemAtPath:prePath toPath:cenPath error:&error]
  • 5、[fileManager createFileAtPath:destinationPath contents:[string dataUsingEncoding:NSUTF8StringEncoding] attributes:nil] 手动创建文件:

偏好设置

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:@"xmg" forKey:@"name"];
    [defaults setInteger:10 forKey:@"age"];

    //立马写入到文件当中
    [defaults synchronize];

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSString *name = [defaults objectForKey:@"name"];
    NSLog(@"name ===%@",name);
    NSInteger age = [defaults integerForKey:@"age"];
    NSLog(@"%ld",age);

编解码归档 NSCoding

解码

//当解析一个文件的时候调用.(告诉当前要解析文件当中哪些属性.)
- (instancetype)initWithCoder:(NSCoder *)aDecoder{
    
    //当只有遵守了NSCoding协议时,才有[super initWithCoder]
    if (self = [super init]) {
        
       self.name = [aDecoder decodeObjectForKey:@"name"];
       self.age = [aDecoder decodeIntForKey:@"age"];
       self.dog = [aDecoder decodeObjectForKey:@"dog"];
    }
    return self;
}

编嘛

//在保存对象时告诉要保存当前对象哪些属性.
-(void)encodeWithCoder:(NSCoder *)aCoder{
    
    [aCoder encodeObject:self.name forKey:@"name"];
    [aCoder encodeInt:self.age forKey:@"age"];
    [aCoder encodeObject:self.dog forKey:@"dog"];
    
}

运用

//获取沙盒目录
    NSString *tempPath =  NSTemporaryDirectory();
    NSString *filePath = [tempPath stringByAppendingPathComponent:@"Person.data"];
    NSLog(@"%@",tempPath);
    
    //归档 archiveRootObject会调用encodeWithCoder:
    [NSKeyedArchiver archiveRootObject:per toFile:filePath];

//unarchiveObjectWithFile会调用initWithCoder
    Person *per = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];

推荐阅读更多精彩内容