数据持久化

应用程序沙盒组成
每一个文件夹就是一个应用程序沙盒
每一个应用程序沙盒下包含以下几个文件

  • Documents(数据备份位置)
  • tmp(临时的缓存数据)
  • xxx(项目名NSBundle)
  • Library(数据库)

获取沙盒下Documents目录的方法

NSArray * array1 = NSSearchPathForDirectoriesInDomains(
                        NSDocumentDirectory,  //获取Documents
                        NSUserDomainMask,  //iOS中一般为此选项
                        YES); //YES是将~符号展开为绝对路径
NSString * docPath = [array1 objectAtIndex:0]; //Documents目录
NSArray * array2 = NSSearchPathForDirectoriesInDomains(
                        NSLibraryDirectory, 
                        NSUserDomainMask, YES);
NSString * libPath = [array2 objectAtIndex:0]; //Library目录
NSString * tmpPath = NSTemporaryDirectory(); //tmp目录

Documents目录在备份时会包含进去,tmp目录备份时并不包含在内

文件类型及文本编码
文件类型是指为了存储信息而使用的对信息的特殊编码方式
我们日常接触到的文件分为ASCII和Binary两种形式
文本编码是使用预先规定的方法将文本编成数字然后加以存储,是一种转换规则
常见文本编码有以下几种:

  • ASCII编码
  • 国标系列编码(GB2312,GBK,GB18030)
  • Unicode编码

使用NSString进行文件读取
使用NSString可以直接读取的文件的内容到字符串中
注意:文件过大会造成内存占用过大,所以使用NSString读取文件内容时需要注意文件大小
NSString中的以方法可以读取文件内容

NSError * error;
NSString * fileContent = [NSString stringWithContentsOfFile:@"文件路径" encoding:NSUTF8StringEncoding error:&error];
//第一个参数是文件的路径
//第二个参数是使用什么样的编码打开指定文件
//第三个参数为错误对象,如果发生错误,错误对象将包含错误信息,注意该参数为指针的指针类型
NSError * error;
NSString *fileContent = [[NSString alloc]initWithContentsOfFile:
@"文件路径" encoding:NSUTF8StringEncoding error:&error];
//此处三个参数跟上面方法中的三个参数含义一致

使用NSString进行文件写入
使用NSString同样可以将字符串的内容写入指定文件,方法如下

NSError * error;
 NSString * content = @“浔阳江头夜送客,枫叶荻花秋瑟瑟。主人下马客在船,举酒欲饮无管弦。醉不成欢惨将别,别时茫茫江浸月。忽闻水上琵琶声,主人忘归客不发。寻声暗问弹者谁?琵琶声停欲语迟。移船相近邀相见,添酒回灯重开宴。千呼万唤始出来,犹抱琵琶半遮面。";
[content writeToFile:@"文件路径" atomically:YES encoding:NSUTF8StringEncoding error:&error];
//第一个参数为要保存的文件路径
//第二个参数为YES时,保存文件会生成临时文件,以防意外发生而破坏原有文件
//第三个参数为保存时使用的编码集
//第四个参数为错误对象,存放保存时的错误信息

使用NSData进行文件读写
NSString读写文件一般处理的都是文本文件,二进制文件往往使用NSData进行读写

NSData * data = [NSData dataWithContentsOfFile:@“文件路径”];
//只有一个参数为要读取的文件路径
NSData * data = [[NSData alloc]initWithContentsOfFile:@"文件路径"];

NSData * data;
//通过某种方法将data中充满数据
[data writeToFile:@"文件路径" atomically:YES];
//第一个参数为要保存的路径
//第二个参数为YES可以在保存时生成临时文件,防止意外发生时,损坏原始文件

NSFileManager的使用
NSFileManager是Objective-C下提供的一个管理文件及目录的类,获取NSFileManager方法如下:

NSFileManager * fileManager = [NSFileManager defaultManager];

NSFileManager常用方法:

BOOL isExists = [fileManager fileExistsAtPath:@“文件路径"];
//判断一个文件或目录是否存在
[fileManager createFileAtPath:@"文件路径" contents:nil attributes:nil];
//创建一个指定内容及属性的文件在给定路径处
[fileManager moveItemAtPath:@"源路径" toPath:@"目标路径" error:nil];
//移动一个文件到目标位置

数据库(Sqlite)
数据库是按照数据结构来组织、存储和管理数据的仓库。在一般的软件中常常需要把某些相关的数据放进这样的“仓库”,并根据需要进行相应的处理。

目前主流的数据库如下:
Oracle(甲骨文公司)、DB2(IBM)、SQL Server(微软)、mySql(MySQL AB - > Sun -> Oracle)、SQLite

Oracle 千万级别的数据库
SQLite 嵌入式数据库

SQLite数据类型
DBA(数据库管理)

SQLite中的数据类型,最常用的有:
Integer 整型
Real 浮点型
Text 文本类型
Blob 二进制类型,用来存储文件,比如图片。

SQL语句
sql 语句就是对数据库进行操作的一种语言,称之为结构化查询语言(Structured Query Language)。
最常用的功能就是增删改查(CRUD)

查找数据:select * from table1 where 范围 (table:表名 where:查询的条件)
增加数据:insert intotable1(field1,field2) values(value1,value2) (insert:列的名称 values:放对应的值)
删除数据:delete from table1 where 范围
修改数据:update table1 set field1=value1 where 范围

使用Sqlite数据库
添加“libsqlit3.dylib库”,并引入头文件"sqlite3.h"
使用sqlite3_open方法打开数据库(如果不存在系统自动新建)
使用sqlite3_exec方法创建数据库表,并插入数据
查找数据
使用sqlite3_close方法释放资源

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容