在介绍本地存储之前先描述一下什么是沙盒机制.

    沙盒机制是IOS的一种安全机制,在沙盒机制中规定,在每个应用程序都位于严格限制的部分,每个应用程序只能在为该程序穿件的文件系统中读取文件,每个应用程序在IOS系统内都放在了统一的文件夹目录下, 而沙盒机制的本身就是一个文件夹, 名字是随机分配的.在沙盒机制里, 允许程序犯错,一旦程序出现错误,系统会将程序回滚到之前的安全状态,就像沙盒一样,你可以任意的在沙盒中作画,如果觉得不好或者画错了,只需要轻轻一抹,沙盒就会摊平,一切又可以重新开始.

     上文说到,沙盒机制的本身是文件夹,那么这些文件夹是什么,都有什么呢?

用于读取操作硬盘文件中的内容,通过获取文件路径可以查看到文件夹的位置,从而访问文件夹

     自定义一个方法获得路径:

    

+ (NSString *)liberayPathWithName:(NSString
{
    NSArray *array = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *path = [array  lastObject];
NSString stringWithFormat:@"%@/%@", path, fileName];
NSLog(@"path = %@", path);
return
}

   我们在supporting files中得文件都保存在bundle文件夹中,我们可以通过访问文件的位置从而访问bundle文件夹,例:

NSString *path = [[NSBundle mainBundle] pathForResource:@"filename" ofType:@"filetype"];

   当我们获取到文件夹路径后,我们来形象的看一下各个文件夹都有什么不同吧!

代码

   2 资源文件

                     3  配置文件

 1 内容在程序运行期间为只读, 不能够进行任何的修改

 2 只有在开发期间可以修改代码

                   特点

Documents --------->1 有大小限制

                                  2 一般存储数据库

                                  3 从应用程序安装到删除的时候所存储的数据

Library -----> 1 caches(文件夹)

                        2 preference(文件夹)

            caches -----> 放图片缓存  网络数据存储缓存

            preference(配置) -----> NSUSerDefaules

tmp(临时性文件夹 : 数据用完就删掉)  

      除了以上的文件,IOS的存储依然少不了数据库, IOS对数据的操作大体有三步

1. 从bundle中拷贝数据库进doc

2.获得数据库指针

3. 对数据库进行操作



     以下代码可以完成对数据库的连接

static sqlite3 *dbpoint =  nil;
 
 DBDataBase
 

 
+ (sqlite3
{
if (dbpoint) {
return dbpoint;
    }
    NSArray *array = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); //获取document文件夹下的所有文件
NSString *path = [array  lastObject];//获取路径
NSString *newPath = [NSString stringWithFormat:@"%@/database.rdb", path];//拼接数据库路径
    NSFileManager *file = [NSFileManager defaultManager];
if (![file fileExistsAtPath:newPath]) {//判断新文件路径是否存在
        NSString *road = [[NSBundle mainBundle] pathForResource:@"database" ofType:@"rdb"];
copyItemAtPath:road  toPath:newPath error:nil];
    }
    sqlite3_open([newPath UTF8String], &dbpoint);
    return dbpoint;
}