选拔沙盒就是文件系统目录,应用沙盒就是文件系统目录

域(Domain)

user defaults
数据库中实际上是由三个层级的域组成的,当你读取一个键值的数目时,NSUserDefaults从上到下透过域的层级寻找正确的值,差其他域有差别的功效,有些域是可持久的,有些域则不行。

  • NSArgumentDomain (参数域):
    有最高的优先权,在此地安装的参数可以覆盖任何地方设置的参数.
  • ApplicationDomain
    (应用域):最要害的域,它存储着您app通过NSUserDataults set...forKey添加的设置.
  • NSGlobalDomain (全局域) :存储着系统的装置
  • Languages – Specific Domain (语言域): 包罗地方、日期等
  • NSRegistrationDomain (参数域) :
    仅有较低的优先权,唯有在应用域没有找到值时才从注册域去追寻。

注:这个域的预先级依次是从上到下.

序言:   
以前学习了数额存储的NSUserDefaults,归档和平解决档,对于项目费用中只要要存储一些文本,比如图片,音频,摄像等文件的时候就须要利用文件存储了。文件沙盒存储紧要囤积非机密数据,大的数目。接下来具体认识一下沙盒存储: 
 
每个ios应用都有和好的使用沙盒,应用沙盒就是文件系统目录,与其余应用的文件系统隔离,ios系统不允许访问其余使用的选取沙盒。在ios8中已经开放访问。 
应用沙盒一般包罗以下多少个文件目录:应用程序包、Documents、Libaray(下边有Caches和Preferences目录)、tmp。 
  应用程序包:包括所有的资源文件和可执行文件。   
Documents:保存应用运行时生成的需求持久化的多少,iTunes会自动备份该目录。苹果提出将顺序中成立的或在程序中浏览到的文本数量保存在该目录下,iTunes备份和死灰复燃的时候会包涵此目录 
 
tmp:保存应用运行时所需的暂时数据,使用落成后再将相应的文本从该目录删除。应用尚未运行时,系统也有可能会免去该目录下的文件,iTunes不会一起该目录。iphone重启时,该目录下的文本会丢掉。 
  Library:存储程序的默许设置和别的景况音信,iTunes会自动备份该目录。   
Libaray/Caches:存放缓存文件,iTunes不会备份此目录,此目录下文件不会在采用退出删除。一般存放体积相比较大,不是专程主要的资源。 
 
Libaray/Preferences:保存应用的持有偏好设置,ios的Settings(设置)应用会在该目录中寻觅应用的设置新闻,iTunes会自动备份该目录。具体获取各种目录代码如下:复制代码 
  // 得到应用程序沙盒的Documents文件夹路径    NSArray
*arrDocumentPaths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES); 
      NSString *documentPath=[arrDocumentPaths objectAtIndex:0];   
NSLog(@”Documents path: %@”,documentPath);        //
获得应用程序沙盒的Caches文件夹路径    NSArray
*arrCachesPaths=NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES); 
  NSString *CachesPath=[arrCachesPaths objectAtIndex:0];   
NSLog(@”Caches path: %@”,CachesPath);        //
得到应用程序沙盒的Downloads文件夹路径    NSArray
*arrDownloadPaths=NSSearchPathForDirectoriesInDomains(NSDownloadsDirectory,NSUserDomainMask,YES); 
  NSString *loadPathsPath=[arrDownloadPaths objectAtIndex:0];   
NSLog(@”Downloads path: %@”,loadPathsPath);        //
得到应用程序沙盒的home文件夹路径    NSString *homePath=
NSHomeDirectory();        // 获得应用程序沙盒的tmp文件夹路径    NSString
*TmpPath=
NSTemporaryDirectory();复制代码为了方便使用整理一个File工具类:FileUtils.h复制代码#import@interface
FileUtils : NSObject

iOS Sandbox

对此一个iOS 程序来说,系统给它提供一个器皿,用来储存自己的新闻.
种种ios应用都有和好的拔取沙盒,应用沙盒就是文件系统目录,与此外使用放入文件
系统隔离,ios系统不允许访问其余应用的应用沙盒.(也有两样,比如在用户授权情形下访问通信录,相册等)

//重回缓存根目录 “caches”

沙盒目录结构

沙盒结构

  • App Bundle: 蕴涵所有资源文件和可执行文件

  • Documents:
    保存应用运行时生成的急需持久化的多少,iTunes会自动备份该目录

  • tmp:
    保存应用运行时所需的暂时数据,使用完成后再将相应的文件从该目录删除,应用尚未运行时,系统也说不定会自行清理该目录下的文本,iTunes不会共同该目录,酷派重启时该目录下的公文仲丢掉。

  • Libaray: 存储程序的默许设置和其他景况音讯,iTunes会自动备份该目录。

  • Libaray/Caches:存放缓存文件,iTunes不会备份此目录,此目录下文件不会在使用退出删除,一般存放体积比较大,不是很重大的资源

  • Libaray/Preferences:保存应用的装有偏好设置,ios的Settings(设置)应用会在该目录中找找应用的安装音信,iTunes会自动备份该目录。

+(NSString *)getCachesDirectory;

什么得到文件路径

iOS设备中种种文件都有路子,那指的是文本在文件系统中的准确地方.要让应用程序能够读写器沙盒中的文件,须求指定该公文的一体化路径.

Core
Foundation提供了一个名为NSSearchDirectoriesInDomains的C语言函数,他赶回指向应用程序的目录Documents或Library/Caches的路径.该函数可以回去五个目录,由此该函数的回来结果是一个NSArray对象.使用该函数来访问指定目录Documents或Library/Caches的路线时,它回到的数组将只包括一个NSString.

// 获取沙盒主目录路径
 NSString *homeDir = NSHomeDirectory();
 // 获取Documents目录路径 
  NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES) firstObject];
 // 获取Library的目录路径
  NSString *libDir = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) firstObject];
 // 获取Caches目录路径
  NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
  // 获取tmp目录路径
   NSString *tmpDir = NSTemporaryDirectory();

//重回根目录路径 “document”

读写多少

NSFileManager是一个单列类,也是一个文件管理器。可以由此NSFileManager创造文件夹、创造文件、写文件、读文件内容等等基本功能。

此间有一篇我觉着写得挺好的:
http://www.jianshu.com/p/64b673ba551b
就不再啰嗦了

+ (NSString *)getDocumentPath;

SQLite

想和大家大快朵颐部分新手入门写得SQLite的数据库不难操作

本身在此地运用的是第三方的库:FMDB.不说废话直接上代码
那是一个用FMDB后写得简单的数据库操作的类

//成立文件夹

AddressBookDataBase.h 文件
  #import <FMDB/FMDB.h>

  #import <Foundation/Foundation.h>

  @interface AddressBookDataBase : NSObject
  -(void)openDataBase:(FMDatabase *)DataBase;
  -(FMDatabase *)createdDataBase;
  -(void)closeDataBase:(FMDatabase *)DataBase;
  -(void)insertDatatoDataBase:(FMDatabase *)DataBase nameIs:(NSString *) name  phoneNumberIs: (NSString *) phoneNumber;
  -(void)deleteDataFromDataBase:(FMDatabase *)DataBase nameIs:    (NSString *) name;
  -(void)modificationDataFromDataBase:(FMDatabase *)DataBase nameIs:(NSString *) name phoneNumberIs: (NSString *) phoneNumber originalName:(NSString *)originalName;
  -(void)deleteTableFromDataBase:(FMDatabase *)DataBase table:(NSString *)tableName;

  @end

+(BOOL)creatDir:(NSString*)dirPath;

AddressBookDataBase.m 文件
 #import "AddressBookDataBase.h"

 @implementation AddressBookDataBase
 -(FMDatabase *)createdDataBase{
    //创建打开数据库
     NSString * strPath = [NSHomeDirectory() stringByAppendingString:@"/Documents/AddressList.db"];
     NSLog(@"%@",strPath);
     FMDatabase * db = [FMDatabase databaseWithPath:strPath];
     if (db != nil) {
          NSLog(@"数据库创建成功");
         }
     return db;
   }

 -(void)openDataBase: (FMDatabase *)DataBase{
      BOOL isOpen = [DataBase open];
      if (isOpen) {
      NSLog(@"打开数据库成功");
     }
   }

-(void)closeDataBase: (FMDatabase *)DataBase{
    BOOL isClose = [DataBase close];
    if (isClose) {
        NSLog(@"关闭数据库成功");
    }
   }

-(void)insertDatatoDataBase:(FMDatabase *)DataBase nameIs:(NSString *) name  phoneNumberIs: (NSString *) phoneNumber {
  NSString * strCreateTable = @"create table if not exists addressList(id integer  primary key autoincrement,name varchar(20),phoneNumber varchar(20));";
//如果执行成功  返回YES
  BOOL isCreate = [DataBase executeUpdate:strCreateTable];

  if(isCreate == YES){
    NSLog(@"创建数据表成功");
   }

   NSString * strInsert = [NSString stringWithFormat:@"insert into addressList values(NULL,'%@','%@');",name,phoneNumber];
   NSLog(@"%@",strInsert);

  BOOL isOK = [DataBase executeUpdate:strInsert];
  if (isOK == YES) {
      NSLog(@"插入数据成功");
  }

 }

-(void)deleteDataFromDataBase:(FMDatabase *)DataBase nameIs:(NSString *) name{
  NSString * strDelete = [NSString stringWithFormat:@"delete from addressList where name = '%@'",name];
  NSLog(@"%@",strDelete);
  BOOL isOK = [DataBase executeUpdate:strDelete];
  if(isOK == YES){
    NSLog(@"删除成功");
  }

}
-(void)modificationDataFromDataBase:(FMDatabase *)DataBase nameIs:(NSString *) name phoneNumberIs: (NSString *) phoneNumber originalName:(NSString *)originalName{

  NSString* strModification = [NSString stringWithFormat:@"update addressList set phoneNumber = '%@', name = '%@' where name = '%@';",phoneNumber,name,originalName];
  NSLog(@"%@",strModification);

  BOOL isOk = [DataBase executeUpdate:strModification];
  if(isOk ==YES){
      NSLog(@"修改表成功!");
  }
}

-(void)deleteTableFromDataBase:(FMDatabase *)DataBase table:(NSString *)tableName{
   NSString* strDeleteTable = [NSString stringWithFormat:@"drop table %@",tableName];
   BOOL isOk = [DataBase executeUpdate:strDeleteTable];
   if(isOk ==YES){
    NSLog(@"删除表成功!");
    }
  }

 @end

关于sqlite的片段语法的标题,这里给大家推荐一个网站
http://www.runoob.com/sqlite/sqlite-update.html.
中间关于SQLite的语句有详尽的语法讲解,希望可以帮到大家.

//删除文件夹

总结

有关Domain的操作 实际上尽管简单的数目存储操作.有时候人家说Domain
你恐怕不了然是何许意思.查查字典,谷歌(Google)会知道的.而Domain又分了不可胜举个Domain.所以很简单就弄混了.你要求精通那几个Domain之间的差别.

关于NSSearchDirectoriesInDomains该函数的再次回到值是一个NSString的数组.
本条函数有个domainMask,那里只举出NSUserDomainMask.的情形.要是那里的参数写的是那么些NSUserDomainMask.可是该数组将唯有一个NSString对象.重临的就是您在NSHomeDirectory下寻找Documents/Library文件夹的路径.所以使用的时候从来用下标访问就足以了.其他的请查阅NSSearchDirectoriesInDomainsAPI的说明

+(BOOL)deleteDir:(NSString*)dirPath;

//移动文件夹

+(BOOL)moveDir:(NSString*)srcPath to:(NSString*)desPath;

//成立文件

+ (BOOL)creatFile:(NSString*)filePath withData:(NSData*)data;

//读取文件

+(NSData*)readFile:(NSString *)filePath;

//删除文件

+(BOOL)deleteFile:(NSString *)filePath;

//重回 文件全路线

+ (NSString*)getFilePath:(NSString*) fileName;

//在相应文件保留数据

+ (BOOL)writeDataToFile:(NSString*)fileName data:(NSData*)data;

//从对应的文本读取数据

+ (NSData*)readDataFromFile:(NSString*)fileName;

@end

复制代码

FileUtils.m

复制代码

#import “FileUtils.h”

@implementation FileUtils

//再次回到缓存根目录 “caches”

+(NSString *)getCachesDirectory

{

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

NSString *caches = [paths firstObject];

return caches;

}

//再次来到根目录路径 “document”

+ (NSString *)getDocumentPath

{

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

NSString *documentPath = [paths firstObject];

return documentPath;

}

//创设文件目录

+(BOOL)creatDir:(NSString*)dirPath

{

if ([[NSFileManager defaultManager]
fileExistsAtPath:dirPath])//判断dirPath路径文件夹是不是已存在,此处dirPath为索要新建的文书夹的相对路径

{

return NO;

}

else

{

[[NSFileManager defaultManager] createDirectoryAtPath:dirPath
withIntermediateDirectories:YES attributes:nil error:nil];//创制文件夹

return YES;

}

}

//删除文件目录

+(BOOL)deleteDir:(NSString*)dirPath

{

if([[NSFileManager defaultManager]
fileExistsAtPath:dirPath])//如若存在临时文件的安插文件

{

NSError *error=nil;

return [[NSFileManager defaultManager]  removeItemAtPath:dirPath
error:&error];

}

return  NO;

}

//移动文件夹

+(BOOL)moveDir:(NSString*)srcPath to:(NSString*)desPath;

{

NSError *error=nil;

if([[NSFileManager defaultManager] moveItemAtPath:srcPath
toPath:desPath error:&error]!=YES)// prePath 为原路径、    cenPath
为对象路径

{

NSLog(@”移动文件败北”);

return NO;

}

else

{

NSLog(@”移动文件成功”);

return YES;

}

}

//创立文件

+ (BOOL)creatFile:(NSString*)filePath withData:(NSData*)data

{

return  [[NSFileManager defaultManager] createFileAtPath:filePath
contents:data attributes:nil];

}

//读取文件

+(NSData*)readFile:(NSString *)filePath

{

return [NSData dataWithContentsOfFile:filePath options:0 error:NULL];

}

//删除文件

+(BOOL)deleteFile:(NSString *)filePath

{

return [self deleteDir:filePath];

}

+ (NSString *)getFilePath:(NSString *)fileName

{

NSString *dirPath = [[self getDocumentPath]
stringByAppendingPathComponent:fileName];

return dirPath;

}

+ (BOOL)writeDataToFile:(NSString*)fileName data:(NSData*)data

{

NSString *filePath=[self getFilePath:fileName];

return [self creatFile:filePath withData:data];

}

+ (NSData*)readDataFromFile:(NSString*)fileName

{

NSString *filePath=[self getFilePath:fileName];

return [self readFile:filePath];

}

@end

复制代码

相关文章