关于iOS的归档

归档,在其他语言中又叫“序列化”,就是将对象保存到硬盘;解档,在其他语言又叫“反序列化”就是将硬盘文件还原成对象。其实归档就是数据存储的过程,在IOS中数据的存储有五种方式:

  1. xml属性列表(plist归档)
  2. NSUserDefaults(偏好设置)
  3. NSKeyedArchiver归档(加密形式)
  4. SQLite3(嵌入式数据库)
  5. Core Data(面向对象方式的嵌入式数据库)

一、首先我们先来看一下xml属性列表,xml属性列表进行归档的方式是将对象存储在一个plist文件中,这个操作起来比较简单,其实相当于xml序列化。但是同时它也有缺点:一是这种方式是明文保存的;二是这种方式操作的对象有限,只有NSArray、NSMutableArray、NSDictionary、NSMutableDictionary支持(归档时只要调用对应的writeToFile方法即可,解档调用arrayWithContentsOfFile或dictionaryWithContentsOfFile,注意像NSString、NSNumber、NSData即使有这个方法它存储的也不是xml格式)。

二、如果要针对更多对象归档或者需要归档时能够加密的话就需要使用NSKeyedArchiver进行归档和解档,使用这种方式归档的范围更广而且归档内容是密文存储。从归档范围来讲NSKeyedArchiver适合所有ObjC对象,但是对于自定义对象我们需要实现NSCoding协议;从归档方式来讲NSKeyedArchiver分为简单归档和复杂对象归档,简单归档就是针对单个对象可以直接将对象作为根对象(不用设置key),复杂对象就是针对多个对象,存储时不同对象需要设置不同的Key。

如果移植到到iOS应用下运行将NSArchiver和NSUnarchiver换成NSKeyedArchiver和NSKeyedUnarchiver。虽然在Foundation部分iOS和OS X在设计上尽可能通用但是还存在着细微差别。

时间: 2024-08-05 15:16:47

关于iOS的归档的相关文章

IOS --- 对象归档

原文:http://blog.sina.com.cn/s/blog_7124765801015imx.html IOS提供的数据持久化方式有:SQLite.CoreData.属性列表.NSUserDefault.对象归档. 这里来简单介绍下对象归档: 对象归档是将对象归档以文件的形式保存到磁盘中(也称为序列化,持久化),使用的时候读取该文件的保存路径读取文件的内容(也称为接档,反序列化), (对象归档的文件是保密的,在磁盘上无法查看文件中的内容,而属性列表是明文的,可以查看). 对象归档有两种方

关于iOS开发归档与解归档路径问题

今天回头看了一下归档与解归档,有普通的归档与解归档,更好的方法是runtimer.在这里我不是讲归档与解归档,而是讲很多文档中出现的一个问题,希望给大家带来帮助,不说废话了,上代码. 1:错误的代码 NSString *filePath = [NSHomeDirectory() stringByAppendingString:@"person"]; 很多文章中用这样的方式获取路径,这句代码的的意思是,在主路径上拼接一个person路径.可惜不成功,不成功的原因应该是苹果手机权限问题.

iOS archiveRootObject 归档失败问题

归档失败问题出在路径上,NSHomeDirectory() NSString *stringPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex: 0]; stringPath = [stringPath stringByAppendingPathComponent:@"a.txt"];            // 成功 NSLog(@&

iOS之归档解档

前几篇文章说到了OC中的Foundation框架:http://blog.csdn.net/jiangwei0910410003/article/details/41852835,今天我们来看一下OC中的一个重要知识点:归档 OC中的归档就是将对象写入到一个文件中,Java中的ObjectInputStream和ObjectOutputStream来进行操作的.当然在操作的这些对象都是需要实现一个接口:Serializable,同样的OC中操作的对象也是需要实现一个协议的,后面会说到. 一.已有

iOS -- 对象归档(将对象存入文件中)

// 定义一个对象Person *p = [[Person alloc] init];p.name = @"jack";p.age = 20;p.height = 180.0;p.address = @"American";// 文件存放路径NSString *path = @"/Users/lianfu/Desktop/one.data";// 将对象存档[NSKeyedArchiver archiveRootObject:p toFile:p

iOS中归档的创建,数据写入与读取

创建一个工程,为ViewController. 新建两个类为NJperson NJperson.h #import <Foundation/Foundation.h> // 如果想将一个自定义对象保存到文件中必须实现NSCoding协议@interface NJPerson : NSObject <NSCoding> @property (nonatomic, copy) NSString *name;@property (nonatomic, assign) int age;@p

iOS开发笔记-swift实现iOS数据持久化之归档NSKeyedArchiver

IOS数据持久化的方式分为三种: 属性列表 (plist.NSUserDefaults) 归档 (NSKeyedArchiver) 数据库 (SQLite.Core Data.第三方类库等 归档(又名序列化),把对象转为字节码,以文件的形式存储到磁盘上:程序运行过程中或者当再次重写打开程序的时候,可以通过解归档(反序列化)还原这些对象.本文主要介绍swift实现iOS数据归档. 归档Foundation框架对象 func archiveData(){ var path: AnyObject=NS

IOS数据存储之归档(NSKeyedArchiver)/解档(NSKeyedUnarchiver)

前言: 前天学习了NSUserDefaults,我们知道NSUserDefaults不能保存自定义对象,所以我们今天来认识一下归档和解档.我们先来回顾一下JAVA是怎么实现保存一个自定义对象的!首先一个自定义对象必须实现Serializable接口,然后把一个对象序列化成二进制数据写入一个byte[]数据或者文件,反之则是从一个二进制数据或者文件中读取二进制数据反序列化成对象,所以我认为ios的归档解档其实就是类似JAVA序列化反序列化的过程,下面写个程序来尝试一下. 先测试下基础类型: //归

IOS学习之NSKeyedArchiver、NSKeyedUnarchiver归档

IOS保存文件的其中一种形式是NSKeyedArchiver.NSKeyedUnarchiver归档: 以下内容以一个to-do lists软件为例,ChecklistItem为一个项目(数据模型),包含一个字符串text和一个BOOL标记checked,items是视图控制器的NSMutableArray,包含多个ChecklistItem,保存数据时以items为整体保存到.plist文件,读取则一样. 1.首先在数据模型的.h文件中实现协议<NSCoding>,例如: @interfac