IOS提供的数据持久化方式有:SQLite、CoreData、属性列表、NSUserDefault、对象归档。

这里来简单介绍下对象归档:

对象归档是将对象归档以文件的形式保存到磁盘中(也称为序列化,持久化),使用的时候读取该文件的保存路径读取文件的内容(也称为接档,反序列化),

(对象归档的文件是保密的,在磁盘上无法查看文件中的内容,而属性列表是明文的,可以查看)。

对象归档有两种方式:1:对foundation中对象进行归档  2:自定义对象归档

1、简单对象归档

使用两个类:NSKeyedArichiver、NSKeyedUnarchiver

NSString *homeDirectory = NSHomeDirectory();   //获取根目录

NSString homePath = [homeDirectory stringByAppendingPathComponent:@"自定义文件名,如test.archiver"];

NSArray *array = @[@"abc", @"123", @12];

Bool flag = [NSKeyedArichiver archiveRootObject:array toFile:homePath];

if(flag) {

NSLog(@"归档成功!");

}

读取归档文件的内容:

NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithFile: homePath ];

NSLog(@"%@", array);

这样就简单了实现了将NSArray对象的归档和解档。

但是这种归档方式有个缺点,就是一个文件只能保存一个对象,如果有多个对象要保存的话那岂不是有n多个文件,这样不是很适合的,所以有了下面这种归档方式。

2、自定义内容归档

归档:

使用NSData实例作为归档的存储数据

添加归档的内容---使用键值对

完成归档

解归档:

从磁盘读取文件,生成NSData实例

根据NSData实例和初始化解归档实例

解归档,根据key访问value

NSString *homeDirectory = NSHomeDirectory(); //获取根目录

NSString homePath = [homeDirectory stringByAppendingPathComponent:@"自定义文件名,如test.archiver"];

NSMutableData *data = [[NSMutableData alloc] init];

NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];

[archiver encodeFloat:50 forKey:@"age"];

[archiver encodeObject:@"jack" forKey:@"name"];

[archiver finishEncoding];  //结束添加对象到data中

[archiver release];

[data writeToFile:homePath  atomically:YES];//将data写到文件中保存在磁盘上

NData *content= [NSData dataWithConenteOfFile:homePath ];

NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:content];

float age = [unarchiver decodeFloatForKey:@"age"];

NSString *name = [unarchiver decodeObjectForKey:@"name"];

好了,就这样,自定义的归档和解归档的使用就这样了。

ios的 对象归档的更多相关文章

  1. iOS开发——UI进阶篇(十一)应用沙盒,归档,解档,偏好设置,plist存储,NSData,自定义对象归档解档

    1.iOS应用数据存储的常用方式XML属性列表(plist)归档Preference(偏好设置)NSKeyedArchiver归档(NSCoding)SQLite3 Core Data 2.应用沙盒每 ...

  2. IOS中对象的归档

    ios提供了两个类 NSKeyedArichiver NSKeyedUnarchiver对自定义对象进行归档 和解档操作 归档常见方法 - (void)encodeObject:(id)objv fo ...

  3. iOS数据存储之对象归档

    iOS数据存储之对象归档 对象归档 对象归档是iOS中数据持久化的一种方式. 归档是指另一种形式的序列化,但它是任何对象都可以实现的更常规的类型.使用对模型对象进行归档的技术可以轻松将复杂的对象写入文 ...

  4. iOS 数据持久化(1):属性列表与对象归档

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css); @import url(/ ...

  5. iOS开发——数据持久化Swift篇&模型对象归档

    模型对象归档 import UIKit class ViewController: UIViewController { @IBOutlet weak var textField: UITextFie ...

  6. iOS 数据持久性存储-对象归档

    对象归档是将对象归档以文件的形式保存到磁盘中(也称为序列化,持久化),使用的时候读取该文件的保存路径读取文件的内容(也称为解档,反序列化) 主要涉及两个类:NSKeyedArichiver.NSKey ...

  7. iOS文档序列化(对象归档)

    对象归档: 概念: 对象归档是指将对象写入文件保存在硬盘,当再次又一次打开程序时,能够还原这些对象.也称:对象序列化.对象持久化. 数据持久性的方式(事实上就是3类) 1,NSKeyedArchive ...

  8. 读写应用程序数据-NSUserDefault、对象归档(NSKeyedArchiver)、文件操作

    ios中数据持久化存储方式一般有5种:NSUserDefault.对象归档(NSKeyedArchiver).文件操作.数据库存储(SQLite3).CoreData. 1.NSUserDefault ...

  9. IOS三种归档(NSKeyArchieve)的总结

    IOS三种归档(NSKeyArchieve)的总结 归档是一种IOS中常用来存储文件的一种方法,在面向对象的语言中,归档也就实际上可以将一切对象存储在文件中,以下是IOS开发中常见的三种文件归档方式, ...

随机推荐

  1. ASP.NET MVC HtmlHelper用法集锦

    ASP.NET MVC HtmlHelper用法集锦 在写一个编辑数据的页面时,我们通常会写如下代码 1:<inputtype="text"value='<%=View ...

  2. 使用js加载器动态加载外部Javascript文件

    原文:http://www.cnblogs.com/xdp-gacl/p/3927417.html 今天在网上找到了一个可以动态加载js文件的js加载器,具体代码如下: JsLoader.js var ...

  3. spring data jpa 创建方法名进行简单查询

    版权声明:本文为博主原创文章,未经博主允许不得转载. spring data jpa 可以通过在接口中按照规定语法创建一个方法进行查询,spring data jpa 基础接口中,如CrudRepos ...

  4. Java 两个变量交换值

    package test; public class Test {    public static void main(String[] args) {        int a, b;       ...

  5. JavaScript的事件对象_其他属性和方法

    在标准的 DOM 事件中,event 对象包含与创建它的特定事件有关的属性和方法.触发的事件类型不一样,可用的属性和方法也不一样. 在这里,我们只看所有浏览器都兼容的属性或方法.首先第一个我们了解一下 ...

  6. matlab cross 3*1 向量叉乘

    一定是1*3  或者3*1 的向量才可以叉乘 A=[1 2 3] B=[4 5 6] cross(A,B) ans=[-3 6 -3] 解决机器人微分运动量之间的等价关系

  7. JDK环境变量安装正确还报错的情况解决方案

    环境变量 JAVA_HOME , PATH 都已配置完毕,并且 java -version也显示正确如下 E:\apache-tomcat-8.0.30-windows-x64\apache-tomc ...

  8. 安卓虚拟机启动失败intel haxm未安装

    1:环境是android studio 在AVD中启动显示,提示当前电脑为安装HAXM emulator: ERROR: x86 emulation currently requires hardwa ...

  9. mydbtest文档

    mydbtest是楼方鑫编写的一个数据库测试工具,有需要的话,请自取 http://pan.baidu.com/s/1mgJpukg#path=%252FOneSQL%252FDocument 找到& ...

  10. ServletInputStream的重复读取(多次读取)(转)

    欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...