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应用数据存储的常用方式的更多相关文章

  1. iOS 应用数据存储的常用方式

    iOS 开发中,经常会有将数据存储到本地的需求.比如一些数据的缓存,或者记录下用户的账号密码,记录下下次是否自动登录等,这些都需要将数据记录到本地.iOS中,数据存储到本地的常见方式有三种: 一: 使 ...

  2. ios应用数据存储的常用方式 ios7.1应用沙盒

    归档:用某种格式保存某个对象,又称持久化. 1XML 属性列表plist归档(持久化) 2Preference(偏好设置) 3NSKeyedArchiver归档 4SQLite3 5Core Data ...

  3. iOS边练边学--应用数据存储的常用方式(plist,Preference,NSKeyedArchiver)其中的三种

    iOS应用数据存储的常用方式: XML属性列表(plist)归档 Preference(偏好设置) NSKeyedArchiver归档(NSCoding) SQLite3--这里暂且不讲 Core D ...

  4. iOS本地数据存储(转载)

    看到一篇不错的文章,推荐给大家!!! 应用沙盒 1)每个iOS应用都有自己的应用沙盒(应用沙盒就是文件系统目录),与其他文件系统隔离.应用必须待在自己的沙盒里,其他应用不能访问该沙盒 2)应用沙盒的文 ...

  5. iOS 应用数据存储方式(XML属性列表-plist)

    iOS 应用数据存储方式(XML属性列表-plist) 一.ios应用常用的数据存储方式 1.plist(XML属性列表归档) 2.偏好设置 3.NSKeydeArchiver归档(存储自定义对象) ...

  6. iOS开发UI篇—ios应用数据存储方式(XML属性列表-plist)

    iOS开发UI篇—ios应用数据存储方式(XML属性列表-plist) 一.ios应用常用的数据存储方式 1.plist(XML属性列表归档) 2.偏好设置 3.NSKeydeArchiver归档(存 ...

  7. iOS开发UI篇—ios应用数据存储方式(归档)

    iOS开发UI篇—ios应用数据存储方式(归档)  一.简单说明 在使用plist进行数据存储和读取,只适用于系统自带的一些常用类型才能用,且必须先获取路径相对麻烦: 偏好设置(将所有的东西都保存在同 ...

  8. iOS开发UI篇—ios应用数据存储方式(归档) :转发

    本文转发至:文顶顶http://www.cnblogs.com/wendingding/p/3775293.html iOS开发UI篇—ios应用数据存储方式(归档)  一.简单说明 在使用plist ...

  9. IOS开发数据存储篇—IOS中的几种数据存储方式

    IOS开发数据存储篇—IOS中的几种数据存储方式 发表于2016/4/5 21:02:09  421人阅读 分类: 数据存储 在项目开发当中,我们经常会对一些数据进行本地缓存处理.离线缓存的数据一般都 ...

随机推荐

  1. 提高你的Java代码质量吧:如果有必要,使用变长数组吧

    一.分析  Java中的数组是定长的,一旦经过初始化声明就不可改变长度,这在实际使用中非常不方便. 二.场景  比如要对班级学生的信息进行统计,因为我们不知道一个班级会有多少学生(随时都有可能会有学生 ...

  2. eclipse+webservice开发实例

    1.參考文献: 1.利用Java编写简单的WebService实例  http://nopainnogain.iteye.com/blog/791525 2.Axis2与Eclipse整合开发Web ...

  3. FloatingWindow

    https://github.com/dev0x10/android-bubble https://github.com/dev0x10/FloatingView https://github.com ...

  4. careercup-中等难度 17.11

    17.11 给定rand5(),实现一个方法rand7().也即,给定一个产生0到4(含)随机数的方法,编写一个产生0到6(含)随机数的方法. 解法: 这个函数要正确实现,则返回0到6之间的值,每个值 ...

  5. linux之Apache

    apache  在linux下命令 2. 编译Apache 在src目录下 ./configure 可用 ./configure--help|less 得到帮助, make, make install ...

  6. Excel导入导出帮助类

    /// <summary>    /// Excel导入导出帮助类    /// 记得引入 NPOI    /// 下载地址   http://npoi.codeplex.com/rele ...

  7. CentOS 6 下安装Python 3

    可以下载各个版本的python:https://www.python.org/ftp/python/ 配置安装 下载最新的安装包(截止2013/11/05),还是3.3.2版本. #wget http ...

  8. MAC上安装Homebrew、Nginx、PHP、MySQL

    准备工作 新版的 Mac OS 内置了Apache 和 PHP,可以通过以下命令查看Apache和PHP的版本号: # httpd -v # php -v 安装Homebrew Mac下的Homebr ...

  9. 【转】Emmagee app性能测试工具使用教程

    简介 Emmagee是网易杭州研究院QA团队开发的一个简单易上手的Android性能监测小工具,主要用于监控单个App的CPU,内存,流量,启动耗时,电量,电流等性能状态的变化,且用户可自定义配置监控 ...

  10. Swift函数|闭包

    在编程中,我们常把能完成某一特定功能的一组代码,并且带有名字标记类型叫做函数,在C语言中,我们知道函数名就是一个指针,它指向了函数体内代码区的第一行代码的地址,在swift中也具有同样的功效. 在Sw ...