IOS数据存储 —— 2 存储方式

IOS数据存储方式

iOS开发常用数据存储方式有:plist、偏好设置 NSUserDefaults、对象归档 NSKeyedArchiver、SQLite3和Core Data

1. plist文件 存储

  plist文件通常用于储存用户设置,利用xml属性列表归档NSDictionary、NSArray、NSNumber等类型数据

  在使用plist进行数据存储和读取,只适用于系统自带的一些常用类型才能用

  注意:plist不能存储自定义对象

  

2. 偏好设置 NSUserDefaults

  偏好设置用来保存“用户名、密码、字体大小、是否自动登录”等设置,主要用于存储应用的设置信息

  

3. 归档 NSKeydeArchiver

  因为前两者都有一个致命的缺陷,只能存储常用的类型。归档可以实现把自定义的对象存放在文件中。

  要使用对象归档,对象必须实现NSCoding协议。大部分Object C对象都符合NSCoding协议,也可以在自定义对象中实现NSCoding协议,要实现NSCoding协议

  

4. SQLite3

  SQLite是一款轻型的嵌入式数据库,安卓和ios开发使用的都是SQLite数据库

  在项目开发中,通常都需要对数据进行离线缓存的处理,如新闻数据的离线缓存等。

  离线缓存一般都是把数据保存到项目的沙盒中,但上述三种方法都有一个致命的缺点,那就是都无法存储大批量的数据,有性能的问题。

  如果使用归档,两个问题:

    (1)数据的存取都必须是完整的,要求写入的时候要一次性写入,读取的时候要一次性全部读取,这涉及到应用的性能问题。

    (2)如果有1000条数据,此时要把第1001条数据存入,那么需要把所有的数据取出来,把这条数据加上去之后,再存入。

  说明:以上的三种技术不能处理大批量数据的存储,大批量数据通常使用数据库来进行存储。

5. Core Data

  Core Data是对SQLite的封装,因为iOS中使用的SQLite是纯C语言的。


1. plist 文件的存储/读取方法

// 文件路径
NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"data.plist"];
// 设置数据
NSArray *data = @[@"jack", @10, @"abcd"];
// 储存plist
[data writeToFile:path atomically:YES];
// 读取
NSArray *data2 = [NSArray arrayWithContentsOfFile: path];

2. 偏好设置 NSUserDefaults

/*  偏好设置——数据存储   类中有相应属性  */
- (void)save {
// 1.利用NSUserDefaults,就能直接访问软件的偏好设置(Library/Preferences)
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

// 2.存储数据
    [defaults setObject:@"qr" forKey:@"name"];
    [defaults setObject:@"123" forKey:@"pwd"];
    [defaults setInteger:10 forKey:@"age"];
    [defaults setBool:YES forKey:@"auto_login"];

// 3.立刻同步
    [defaults synchronize];

}
/*  偏好设置——读取数据  */
- (void)read {
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSString *account = [defaults objectForKey:@"account"];
    BOOL autoLogin = [defaults boolForKey:@"auto_login"];
    NSLog(@"%@ -- %d", account, autoLogin);

}

3. 对象归档 NSKeyedArchiver

/*  归档——存储自定义对象  */
Person *p = [[Person alloc] init];
p.age = 18;
p.name = @"qr";
// 拼接文件名
NSString *path = NSTemporaryDirectory() stringByAppendingPathComponent:@"person.data"];
[NSKeyedArchiver archiveRootObject:p toFile:Path];
// 解档
Person *p = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
/*  Person 类中要实现的方法  */

// 遵守< NSCoding > 协议

// 什么时候调用:当一个对象要归档的时候就会调用这个方法归档
// 作用:告诉苹果当前对象中哪些属性需要归档
- (void)encodeWithCoder:(NSCoder *)aCoder
{
    [aCoder encodeObject:_name forKey:@"name"];
    [aCoder encodeInt:_age forKey:@"age"];
}
————————————————————————————
// 作用:告诉苹果当前对象中哪些属性需要解档
// initWithCoder什么时候调用:只要解析一个文件的时候就会调用
- (id)initWithCoder:(NSCoder *)aDecoder
{
    #warning  [super initWithCoder]
    // 这里不能用[super initWithCoder],什么时候调用[super initWithCoder:aDecoder]:只要父类遵守了NSCoding协议,就调用
    if (self = [super init]) {
        // 解档
        // 注意一定要记得给成员属性赋值
      _name = [aDecoder decodeObjectForKey:@"name"];
      _age = [aDecoder decodeIntForKey:@"age"];
    }
    return self;
}

/*  后续给出  */

4. SQLite3

5. Core Data

时间: 2024-12-24 01:55:03

IOS数据存储 —— 2 存储方式的相关文章

【学习总结】iOS 数据保存几种方式总结

在iOS开发过程中,不管是做什么应用,都会碰到数据保存的问题.将数据保存到本地,能够让程序的运行更加流畅,不会出现让人厌恶的菊花形状,使得用户体验更好.下面介绍一下数据保存的方式: NSKeyedArchiver:采用归档的形式来保存数据,该数据对象需要遵守NSCoding协议,并且该对象对应的类必须提供encodeWithCoder:和initWithCoder:方法.前一个方法告诉系统怎么对对象进行编码,而后一个方法则是告诉系统怎么对对象进行解码. NSUserDefaults:用来保存应用

iOS 数据持久化4种方式

iOS 4种讲数据持久存储到iOS文件的系统机制: 属性列表(NSUserDefaults.plist文件) 对象归档(NSCoding) iOS嵌入式关系数据库(SQLite3) 苹果提供的持久化工具(Core Data) 说道数据持久化都涉及到一个共同的要素.既然是把数据持久存储到iOS文件系统中,那么久涉及到了应用沙盒. 可以尝试使用Xcode建立一个空的应用,然后打开应用目录可以查看到有以下文件 1.Documents ①存放内容 我们可以将应用程序的数据文件保存在该目录下.不过这些数据

iOS数据存储的几种方式

iOS的数据存储是iOS应用开发的重要知识点: 关于这方面知识,网上有很多介绍,但对于代码层次的使用方式并未有系统全面介绍.此文章针对iOS稍熟悉的童鞋,需要对CoreData的原理有一定的了解.目前存储方式大概有以下几种: NSKeyedArchiver  适用简单数据加密 NSUserDefaults  适用配置参数 Write  文件操作,同NSKeyedArchiver SQLite3  操作较复杂,不建议使用. CoreData  取代SQLite3,但要遵循NSManagedObje

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

iOS应用数据存储的常用方式: XML属性列表(plist)归档 Preference(偏好设置) NSKeyedArchiver归档(NSCoding) SQLite3--这里暂且不讲 Core Data--这里暂且不讲 一.应用沙盒 每个iOS应用都有自己的应用沙盒(应用沙盒就是文件系统目录),与其他文件系统隔离.应用必须待在自己的沙盒里,其他应用不能访问该沙盒 应用沙盒的文件系统目录,如下图所示 二.应用沙盒结构分析 应用程序包:(上图中的Layer)包含了所有的资源文件和可执行文件 Do

IOS数据本地存储的四种方式--

注:借鉴于:http://blog.csdn.net/jianjianyuer/article/details/8556024 在IOS开发过程中,不管是做什么应用,都会碰到数据保存问题.将数据保存到本地,能够让程序更加流畅,不会出现让人厌恶的菊花状,使得用户的体验更好.下面是介绍数据保存的方式 第一.NSKeyedArchiver:采用归档的形式来保存数据.(归档——解档)———大量数据和频繁读写不合适使用 1.归档器的作用是将任意的对象集合转换为字节流.这听起来像是NSPropertyLis

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

ios程序中数据数据存储有下列5种方式 XML属性列表(plist)归档 Preference(偏好设置) NSKeyedArchiver归档(NSCoding) SQLite3 Core Data 每个iOS应用都有自己的应用沙盒(应用沙盒就是文件系统目录),与其他文件系统隔离.应用必须待在自己的沙盒里,其他应用不能访问该沙盒 应用沙盒的文件系统目录,如下图所示(假设应用的名称叫Layer) 模拟器应用沙盒的根路径在: (apple是用户名, 7.0是模拟器版本) /Users/apple/L

IOS数据存储常用的5种方式

iOS中的数据存储(上) iOS应用数据存储的常用方式: 应用沙盒: 应用沙盒结构分析 Documents: temp: Library/Caches: Library/Preference: 沙盒根路径: 属性列表 偏好设置(Preference) NSKeyedArchiver NSData iOS中的数据存储(上) iOS应用数据存储的常用方式: 1> XML属性列表(plist)归档. 2> Preference(偏好设置). 3> NSKeyedArchiver归档. 4>

iOS数据存储的方式总结

iOS沙盒目录下有四个文件夹.分别是: -Documents:应该将所有的应用程序数据文件写入到这个目录下.这个目录用于存储用户数据或其它应该定期备份的信息.-AppName.app:这是应用程序的程序包目录,包含应用程序的本身.由于应用程序必须经过签名,所以您在运行时不能对这个目录中的内容进行修改,否则可能会使应用程序无法启动.-Library:这个目录下有两个子目录:Caches 和 PreferencesPreferences:包含应用程序的偏好设置文件.您不应该直接创建偏好设置文件,而是

iOS数据持久化存储

本文中的代码托管在github上:https://github.com/WindyShade/DataSaveMethods 相对复杂的App仅靠内存的数据肯定无法满足,数据写磁盘作持久化存储是几乎每个客户端软件都需要做的.简单如"是否第一次打开"的BOOL值,大到游戏的进度和状态等数据,都需要进行本地持久化存储.这些数据的存储本质上就是写磁盘存文件,原始一点可以用iOS本身支持有NSFileManager这样的API,或者干脆C语言fwrite/fread,Cocoa Touch本身