iOS应用数据存储的常用方式
iOS应用 数据存储的常用方式
- XML属性列表 plist
- Preference 偏好设置
- NSKeyedArchiver 归档
- Core Data
- SQLite3
应用沙盒:

Layer: 应用程序包(通常以应用程序名作为应用程序包名),包含所有资源文件和可执行文件
Documents: 保存应用运行时生成的需要持久化的数据,iTunes同步数据是会备份该目录
temp: 保存应用运行时所需要的临时文件,应用没有运行时系统可能会清除该目录下的文件,iTunes同步设备时不会备份该目录
Library:/Caches: 保存应用运行时生成的需要持久化的数据(一般都是些存储体积大且不需要备份的非重要数据),iTunes同步设备时不会备份该目录
Library:/Preferences: 保存应用的所有偏好设置, iOS的Settings(设置)。应用会在该目录下查找应用的设置信息,iTunes同步设备时不会备份该目录
plist文件读写
//获取沙盒路径:
NSString *homeDir = NSHomeDirectory();
//获取temp路径:
NSString *tempDir = NSTemporaryDirectory();
//搜索目录(通过例子:将数字dataArr放入Documents路径下,然后读取):
NSArray *dicArr = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
//NSDocumentDirectory 搜索的目录名称(参数的值:NSDocumentDirectory 表示搜索的目录是Documents; NSCatchesDirectory: 表示搜索Library:/Caches;
//NSUserDomainMask 搜索范围
//YES 是否展开路径
NSString *filePath = dicArr[0];
NSString *finalPath = [filePath stringByAppendingPathComponent:@"abc.plist"];
NSArray *dataArr = @[@"1", @"sbd", @"sk34"];
//将数组写入路径finalPath下的abc.plist文件下
[dataArr writeToFile:finalPath atomically: YES];
//从该路径下读取数组
NSArray *strArr = [NSArray arrayWithContentsOfFile: finalPath];
NSL(@"%@", strArr);
偏好设置 (Library:/Preferences)
偏好设置: 可以用来保存用户名, 密码,App的设置参数等。最终还是以.plist文件保存的
每个应用都有一个NSUserDefaults实例, 通过它可以存取偏好设置
//将数据存入偏好设置
//注: 因为没有指定路径和名称,偏好设置会默认将项目名作为偏好设置保存文件的文件名,保存在默认路径App的Library/Preference中, 且后缀名为.plist
-(IBAction)save {
//偏好设置
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
//根据一个key设置一个值
[userDefaults setObject:@"sksk" forKey:@"name"];
[userDefaults setinteger:10 forKey:@"age"];
//但是偏好设置在设置好键值对后不会立即保存,如果需要立刻保存需要添加下面语句
[userDefaults synchronize];
}
//从偏好设置取出数据
-(IBAction)read {
//偏好设置
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
//根据一个key获取对应的值
NSString *name = [userDefaults objectForKey:@"name"];
NSInteger age = [userDefaults integerForKey:@"age"];
NSLot(@"%@, %ld", name, age);
}
归档(NSKeyedArchiver)
偏好设置, plist都不能直接保存自定义的对象, 归档是专门用来保存自定义对象的。
//自定义一个Person类对象
//1. 在Person.h中遵守<NSCoding>协议
//2. Person.m中实现下面两个协议方法(第一个用来归档,第二个用来解档)
//描述需要归档的属性用于保存数据
- (void)encodeWithCoder:(NSCoder *)aCoder {
[aCoder encodeObject:self.name forKey:@"name"];
[aCoder encodeInt32: self.age forKey: @"age"];
}
//告诉当前对象需要从文件中读取哪些数据
- (instancetype)initWithCoder: (NSCoder *)aDecoder {
//这里[super init]而没有使用[super initWithCoder:]是因为Person的父类没有遵守<NSCoding>协议
if (self = [super init] {
self.name = [aDecoder decodeObjectForKey: @"name"];
self.age = [aDecoder decodeInt32ForKey: @"age"];
}
return self;
}
Person *p = [[Person alloc] init];
p.name = @"xiaoming";
p.age = 10;
//3. 归档将数据归档
NSString *filePath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *filePathName = [filePath stringByAppendingPathComponent:@"person.data"];
[NSKedArchiver archiveRootObject: p toFile: filePathName];
//4. 从归档中取出数据
NSString *filePath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *filePathName = [filePath stringByAppendingPathComponent:@"person.data"];
[NSKedUnarchiver unarchiveObjectWithFile: filePathName];
//注: 如果有自定义对象 (比如Dog对象) 作为Person的属性, 那么Person的属性Dog对象的类中也要遵守协议并实现那两个方法(encodeWithCoder, initWithCoder)
initWithCoder 当一个类解析一个文件时就会调用这个方法
iOS应用数据存储的常用方式的更多相关文章
- iOS 应用数据存储的常用方式
iOS 开发中,经常会有将数据存储到本地的需求.比如一些数据的缓存,或者记录下用户的账号密码,记录下下次是否自动登录等,这些都需要将数据记录到本地.iOS中,数据存储到本地的常见方式有三种: 一: 使 ...
- ios应用数据存储的常用方式 ios7.1应用沙盒
归档:用某种格式保存某个对象,又称持久化. 1XML 属性列表plist归档(持久化) 2Preference(偏好设置) 3NSKeyedArchiver归档 4SQLite3 5Core Data ...
- iOS边练边学--应用数据存储的常用方式(plist,Preference,NSKeyedArchiver)其中的三种
iOS应用数据存储的常用方式: XML属性列表(plist)归档 Preference(偏好设置) NSKeyedArchiver归档(NSCoding) SQLite3--这里暂且不讲 Core D ...
- iOS本地数据存储(转载)
看到一篇不错的文章,推荐给大家!!! 应用沙盒 1)每个iOS应用都有自己的应用沙盒(应用沙盒就是文件系统目录),与其他文件系统隔离.应用必须待在自己的沙盒里,其他应用不能访问该沙盒 2)应用沙盒的文 ...
- iOS 应用数据存储方式(XML属性列表-plist)
iOS 应用数据存储方式(XML属性列表-plist) 一.ios应用常用的数据存储方式 1.plist(XML属性列表归档) 2.偏好设置 3.NSKeydeArchiver归档(存储自定义对象) ...
- iOS开发UI篇—ios应用数据存储方式(XML属性列表-plist)
iOS开发UI篇—ios应用数据存储方式(XML属性列表-plist) 一.ios应用常用的数据存储方式 1.plist(XML属性列表归档) 2.偏好设置 3.NSKeydeArchiver归档(存 ...
- iOS开发UI篇—ios应用数据存储方式(归档)
iOS开发UI篇—ios应用数据存储方式(归档) 一.简单说明 在使用plist进行数据存储和读取,只适用于系统自带的一些常用类型才能用,且必须先获取路径相对麻烦: 偏好设置(将所有的东西都保存在同 ...
- iOS开发UI篇—ios应用数据存储方式(归档) :转发
本文转发至:文顶顶http://www.cnblogs.com/wendingding/p/3775293.html iOS开发UI篇—ios应用数据存储方式(归档) 一.简单说明 在使用plist ...
- IOS开发数据存储篇—IOS中的几种数据存储方式
IOS开发数据存储篇—IOS中的几种数据存储方式 发表于2016/4/5 21:02:09 421人阅读 分类: 数据存储 在项目开发当中,我们经常会对一些数据进行本地缓存处理.离线缓存的数据一般都 ...
随机推荐
- Android多媒体-人脸识别
1. 相关背景 Google 于2006年8月收购Neven Vision 公司 (该公司拥有 10 多项应用于移动设备领域的图像识别的专利),以此获得了图像识别的技术,并不是常快应用到免费的 Pic ...
- 初学Node.js第一天
最近开始下班到家不知道该做啥,因为水平太菜,要学的东西实在太多,反而陷入了不知道该学什么的困境,结果天天就是看别人的博客,看到什么标题比较感兴趣就点进去,没有一个目标. 今天突然兴起,决定要捣鼓捣鼓N ...
- webService 讲解
Web Service简介: Web Service 是构建互联网分布式系统的基本部件,可以将具有特定功能或者可复用应用程序封装. 技术组成要素: SOAP:Web Service的基本通信协议,由普 ...
- Jackson框架,json转换
Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json.xml转换成Java对象. 前面有介绍过json-lib这个框架,在线博文:http://www.cnblo ...
- C语言里的文件函数
1.File *pf = fopen("文件名","打开方式"); 文件名可以加路径,两个"\\"或者一个"/" 打开方 ...
- PHP Slim 框架初体验之无法访问控制器
话不多说,先把报错贴出来: 刚开始用slim框架,在设置完自动加载文件和路由文件之后,我写了一个控制器: <?php use \Psr\Http\Message\ServerRequestInt ...
- javascript数据结构和算法[转]
字符串表示的数组 join() 和 toString() 函数返回数组的字符串表示.这两个函数通过将数组中的元素用逗号分隔符分割,返回字符串数组表示. 这里有个例子: var names = [&qu ...
- Gvim使用心得--设置篇[转]
1.设置自己喜欢的字体? 点“编辑”--“选择字体”, 然后在字体列表中选择一个你喜欢的字体和字号,然后确认. 如果想每次都使用这个这个字体 需要加到启动文件中 比如我的 set guifont=Co ...
- Oracle存储过程学习使用
存储过程创建语法: create or replace procedure 存储过程名(param1 in type,param2 out type) as 变量1 类型(值范围); 变量2 类型(值 ...
- C#嵌套类型
1.什么是嵌套类型:在类和结构内部定义的类型称为嵌套类型,例如 class Container { class Nested { Nested() { } } } 2.不管外部类型是结构还是类.嵌套类 ...