版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、【理解】iOS数据持久化存储总述: 所谓数据持久化是指,将数据存储下来,使得应用程序下次打开或 者机器重启后可以继续访问之前保存的数据。iOS开发中有多种持久 化方案,如:?plist文件(属性列表)?NSKeyedArchiver (对象归档)? preferenee偏好设置)?sqlite3? eoredata?沙盒机制:ios不同应用有独立的文件目录,不能互相访问。这个 独立的文件目录就称为 ”沙盒”.?1、目录结构,苹果帮忙创建应用的目录机构,如下: ? “应用程序包 ”?Doeuments 保存的持久性最强,可同步到其它地方。? Library 下有 Cache 禾口 Prefere
2、nces? tmp:用于存放临时文件,?2、目录说明? “应用程序包 ”:这里存放的是应用程序源文件,包括资源文件和可执行文件。NSString *path = NSBundle mainBundlebundlePath;“ Docume nts最常用的目录,itu nes同步该应用时,会同步 此文件中的内容,适合存储重要数据。NSString *path =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUser DomainMask,YES).firstObject;Library /Cache:ITu nes不会同步此文
3、件夹,适合存储体积 大,不需要备份的非重要数据。NSString *path = NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDo mainMask,yes).firstObject;Library /Preferences:ITune哙同步此文件夹,通常保存 应 用的设置信息tmp: iTunes不会同步此文件夹,系统可能在应用没运行时 就删除该目录下的文件,所以此目录适合保存一些临时文件,用完 就删除。NSString *path= NSTemporaryDirectory();一、 plist 属性文件plist
4、文件是将某些特定的类,通过xml文件的方式保存在目录中。 可以被序列化的类型:1. NSArray2. NSMutableArray3. NSDictionary4. NSMutableDictionary5. NSData6. NSMutableData7. NSString8. NSMutableString9. NSNumber10. NSDate只有以上10种类型才能使用plist文件存储。存储时使用writeToFile:atomically:方法。其中第二个参数atomically表示是否需 要先写入一个辅助文件,再把辅助文件拷贝到目标文件地址。这是 更安全的卸乳文件方法,一般都用
5、 yes。读取时使用 arrayWithContentsOfFile:方法。1 、获取路径NSString *path =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES).firstObject;NSString *fileName = path stringByAppendingPathComponet: ” test.plist ”; 2、存储数据NSString *array= 中” ,” 4g” ,” 3g” ;array writeToFile:fileName atomical
6、ly:YES; 3、读取数据NSArray *data =NSArray arrayWithContentsofFIle:fileName;二、preference 偏好设置/ 偏好设置-(void)persistencePreferences/ 1、获取 NSUserDefaults 文件NSUserDefaults *userDefaultS =NSUserDefaults standardUserDefaults;/ 2、向文件写入文件内容userDefaultS setInteger:50 forKey:age;userDefaultS setObject:zhangsan forKe
7、y:name;userDefaultS setBool:YES forKey:sex;userDefaultS synchronize;/ 读取内容NSString *name = userDefaultS stringForKey:name;NSInteger age = userDefaultS integerForKey:age;BOOL sex = userDefaultS boolForKey:sex; 偏好设置通常用来保存应用程序的配置信息,一般不要在偏好设置 中保存其它数据。调用 synchronize 方法就会立即写入文件,如果没有调用,系统会根 据 I/O 情况不定时刻保存到
8、文件中。偏好设置会将所有数据保存到 preference 目录下的一个以此应用报 名来命名的 plist 文件。存储自定义对象需要实现NSCoding协议三、NSKeyedArchiver 偏归解 档归解档操作( NSKeyedArchiver/NSKeyedUnArchiver )通过对自定 义对象进行操作。归解档后的自定义对象很方面进行持久化操作, 方便于对象以文件的形式进行存储。归解档的对象需要实现NSCoding 协议。1、自定义对象实现 NSCoding 协议interface UserModel : NSObjectobjc view plain copy1 property (
9、non atomic , copy ) NSStri ng *n ame;2 property ( non atomic ,assig n)NSIn teger age;3 property (non atomic ,assig n) BOOL sex;4 5 endobjc view plain copyXC1 #import UserModel.h3 implementation UserModel归档void )encodeWithCoder:( NSCoder *)aCoderaCoder encodeObject : self .name forKey : name ;aCoder
10、encodeInteger : self .age forKey : age ;aCoder encodeBool : self .sex forKey : sex ;/ 解档- (nullable instancetype)initWithCoder:( NSCod er *)aDecoderif ( self init )self .name = aDecoder decodeObjectFor45/6-(789101112131415161718Key: name ;19selfKey: age;.age :=aDecoderdecode In tegerFor20self.sex :=
11、aDecoderdecodeBoolForKey:sex;2122retur nselfJ232、使用NSKeyedArchiver进行对象归档objc view plain copyXcl11 - ( void )persistArchived2 NSStri ng*path = NSSearchPathForDirectoriesIn Domai ns(NSDocume ntDirectory, NSUserDoma inMask, Y ES).firstObject;3 NSStri ng*filePath = pathstri ngByAppe ndingPathComponent :
12、 user.data ;4 UserModel *user =UserModel alloc init;5 = zhangsan ;6 user.age= 50;7 user.sex = NO;8 / 调用 NSKeyedArchiver工厂方法实现归档:9 NSKeyedArchiver archiveRootObject :user toFi le :filePath;10 / 解档:从文件中解档对象就调用NSKeyedUnarchiver 的一个工厂方法 unarchiveObjectWithFile: 。11 UserModel *unarchiverUser =
13、NSKeyedUnarchiver unarchiveObjectWithFile :filePath;1213 NSLog( unarchiverUser- name%,unarchiverUser-name%d, unarchiverUser- age%ld , unarchiverU, unarchiverUser. sex, unarchiverUser.age);14 如果需要归档的类是某个自定义类的子类时,就需要在归档和解档 之前先实现父类的归档和解档方法。 super encodeWithCoder:aCoder 和 super initWithCoder:aDe
14、coder 方法 ;建议对象也同时实现NSCopying协议,该协议允许复制对象,要实现NSCopying协议须实现-(id)copyWithZone:(NSZone *)zone 方法。保存的文件的扩展名可以任意指定。四、sqlite31、概述sqlite是个开源嵌入式关系数据库,SQLite嵌入到使用它的应用程序 中,它们共用相同的进程空间,而不是单独的一个进程 .sqlite不是覆 盖存储,不像其他持久化操作,需要把整个文件读取出来,然后修 改数据后把整个内容写入文件,所以他们都不适合存储大量数据。字段类型? 表面上SQLite将数据分为以下几种类型:integer: 整数real :实
15、数(浮点数)text :文本字符串blob:二进制数据,比如文件,图片之类的。 ? sqlite数据类 型,只是一种数据类型的规范,实际上是无类型的,不指定数据类 型依旧可以存储数据,创建表时也可以不用指定类型,不管为了规 范都建议设置正确的数据类型,主键的话必须设置为 in teger类型。1、打开数据库指定数据库文件,指定或者创建一张表匚1 -(2 /objc view plain copyvoid )openDatabase1.设置文件名3 NSString*dbFile = NSSearchPathForDirectoriesInDomains(NSDocume ntDirectory
16、,NSUserDomai nMask,YES)firstObjectstringByAppendingPathComponet: user.db ;4/2.打开数据库文件5 NSString*dbFile = NSSearchPathForDirectoriesInDomains(NSDocume ntDirectory, NSUserDomai nMask,YES).firstObject stringByAppendingPathComponent: user.db ;62.打开数据库文件,如果没有就会自己创建一个表1 NSI nteger result = sqlite3_ope n(
17、dbFile.UTF8Stri ng,& sqlite);2 if (result = SQLITE_OK)3 NSLog( 打开成功);44 char &error = NULL;5 sqlite3_exec(sqlite,CREATE TABLE IF NOT EXISTSt_user(id in teger primary key auto in creme nt, n ame text ,age integer), NULL, NULL,&error);6 if (error)7 NSLog( create error %S ,error);910 else 11 NSLog(打开失败
18、);12 3、执行指令使用sqlite_exec()方法执行除查询以外的其他数据库操作?如插入数据:objc view plain copyXcl1-( void )insertData2 NSString*name= zhangsan;3 NSInteger age = 19;4 NSStri ng *sql=NSStri ngstringWithFormat: INSERT INTO t_user (name,NULL sqlite_);5 char *error = exec(sqlite,sql.UTF8String,NULL,NULL,&error); 6 if (error)7 NSLog( erorr8 span style=fontfamily: Helvetica Neue, Helvetica, STheiti, 微软雅黑 , 黑体 , Arial, Tahoma, sans- serif, serif; line-height: 25.2px;10 查询指令:查询需要几条语句配合使用sqlite3_prepare_v2 检查sql合法 性,sqlite3_step()逐行获取查询结果,不断重复,知道最后一条记录sqlit
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年上虞风机培训考试试题及答案
- 全国范围内幼儿教育师资培训考试
- 初中教师探究式教学实施能力提升研究-基于2024年能力提升方案与实施效果评估
- 2026年及未来5年市场数据中国宠物店行业市场发展现状及投资前景展望报告
- 家具木材含水率检测技术方案
- (2026年)产科高风险药物安全用药与错误防范案例解析课件
- (2026版)视网膜中央动脉阻塞神经介入专家共识课件
- 驻马店汝南县政务服务中心招聘公益性岗位人员笔试真题2025
- 《酒店人际沟通实务》课件-1.问题认知 - 沟通障碍的概念
- 钢结构拼接工艺优化方案
- 【某电动汽车两档变速器设计11000字(论文)】
- 苗木采购投标方案(技术方案)(技术方案)
- 城市社区管理中存在的问题与对策研究-以天津丁字沽社区为例
- 国家高速公路福银线(G70)西安至永寿段改扩建项目环境影响报告表
- 安徽绿沃循环能源科技有限公司12000t-a锂离子电池高值资源化回收利用项目(重新报批)环境影响报告书
- 三年级第二学期绘本教学《Prince Seb's Pet》课件
- GB/T 26610.5-2022承压设备系统基于风险的检验实施导则第5部分:失效后果定量分析方法
- YS/T 582-2013电池级碳酸锂
- 第九章初起火灾处置基础知识
- 安全风险辨识记录
- 风湿性多肌痛的诊断与治疗课件
评论
0/150
提交评论