第一、数据持久化的方式:

NSKeyedArchiver--对象归档

属性列表化(NSArray、NSDictionary、NSUserDefault)

SQlite数据库、CoreData数据库

其中第一、二种方式针对数据量小的数据,第三种方式针对大数据,归档的文件是加密的,属性列表明文的。

归档的形式;

对foundation库中对象进行归档

自定义对象的归档(需要实现归档协议:NSCoding)

第二 最简单归档和解归档的实现代码:

  1. @autoreleasepool {
  2. NSString *homeDictory=NSHomeDirectory();
  3. NSArray *array=[NSArray arrayWithObjects:@"one",@"two",@"three",nil];
  4. NSString *homePath=[homeDictory stringByAppendingPathComponent:@"Desktop/test.archive"];
  5. if(![NSKeyedArchiver archiveRootObject:array toFile:homePath])
  6. {
  7. NSLog(@"归档失败");
  8. }else
  9. {
  10. NSArray *data=[NSKeyedUnarchiver unarchiveObjectWithFile:homePath];
  11. NSLog(@"%@",data);
  12.  
  13. }
  14.  
  15. NSLog(@"Hello, World!");
  16.  
  17. }

第四、复杂的内容归档

使用NSData实例作为归档的存储数据,添加归档的内容(设置key和value),完成归档,将归档内容存入磁盘

解归档步骤:从磁盘读取文件,生成NSData实例,根据data实例创建或初始化归档实例,解归档,根据key访问value的值

  1. NSString *homeDictory=NSHomeDirectory();
  2. NSString *homePath=[homeDictory stringByAppendingPathComponent:@"Desktop/usertest.archive"];
  3.  
  4. NSMutableData *data=[NSMutableData data];
  5. NSKeyedArchiver *archiver=[[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
  6.  
  7. NSArray *nameArray=[NSArray arrayWithObjects:@"andy",@"yang", nil];
  8. [archiver encodeInt:100 forKey:@"age"];
  9. [archiver encodeObject:nameArray forKey:@"names"];
  10. [archiver finishEncoding];
  11. [archiver release];
  12.  
  13. if ([data writeToFile:homePath atomically:YES])
  14. {
  15.  
  16. NSData *data2=[NSData dataWithContentsOfFile:homePath];
  17. NSKeyedUnarchiver *unarchiver=[[NSKeyedUnarchiver alloc] initForReadingWithData:data2];
  18. int age=[unarchiver decodeIntForKey:@"age"];
  19. NSArray *array2=[unarchiver decodeObjectForKey:@"names"];
  20. NSLog(@"%d",age);
  21. NSLog(@"%@",array2);
  22. [unarchiver release];
  23. } else
  24. {
  25.  
  26. NSLog(@"write to file wrong");
  27. }
  28.  
  29. NSLog(@"Hello, World!");
  30.  
  31. }

objective C中数据持久化方式1--对象归档的更多相关文章

  1. iphone开发中数据持久化之——模型对象归档(二)

    在Cocoa世界中,术语“归档”是指另一种形式的序列化,它可以实现对任何对象的序列化.使用对模型对象进行归档的技术可以轻松将复杂的对象写入文件,然后再从中读取它们.只要在类中实现的每个属性都是标量(如 ...

  2. iOS中的数据持久化方式

    iOS中的数据持久化方式,基本上有以下四种:属性列表.对象归档.SQLite3和Core Data. 1.属性列表 涉及到的主要类:NSUserDefaults,一般 [NSUserDefaults ...

  3. iOS开发中的4种数据持久化方式【二、数据库 SQLite3、Core Data 的运用】

                   在上文,我们介绍了ios开发中的其中2种数据持久化方式:属性列表.归档解档.本节将继续介绍另外2种iOS持久化数据的方法:数据库 SQLite3.Core Data 的运 ...

  4. 四种数据持久化方式(下) :SQLite3 和 Core Data

    在上文,我们介绍了iOS开发中的其中2种数据持久化方式:属性列表.归档解档. 本节将继续介绍另外2种iOS持久化数据的方法:数据库 SQLite3.Core Data 的运用: 在本节,将通过对4个文 ...

  5. iOS数据持久化方式及class_copyIvarList与class_copyPropertyList的区别

    iOS数据持久化方式:plist文件(属性列表)preference(偏好设置)NSKeyedArchiver(归档)SQLite3CoreData沙盒:iOS程序默认情况下只能访问自己的程序目录,这 ...

  6. iphone开发中数据持久化之——属性列表序列化(一)

    数据持久化是应用程序开发过程中的一个基本问题,对应用程序中的数据进行持久化存储,有多重不同的形式.本系列文章将介绍在iphone开发过程中数据持久化的三种主要形式,分别是属性列表序列号.对象归档化以及 ...

  7. IOS开发中数据持久化的几种方法--NSUserDefaults

    IOS开发中数据持久化的几种方法--NSUserDefaults IOS 开发中,经常会遇到需要把一些数据保存在本地的情况,那么这个时候我们有以下几种可以选择的方案: 一.使用NSUserDefaul ...

  8. iOS开发中的4种数据持久化方式【一、属性列表与归档解档】

    iOS中的永久存储,也就是在关机重新启动设备,或者关闭应用时,不会丢失数据.在实际开发应用时,往往需要持久存储数据的,这样用户才能在对应用进行操作后,再次启动能看到自己更改的结果与痕迹.ios开发中, ...

  9. QF——iOS中数据持久化的几种方式

    数据持久化的几种方式: 一.属性列表文件: .plist文件是种XML文件.数组,字典都可以和它互相转换.数组和字典可以写入本地变成plist文件.也可以读取本地plist文件,生成数组或字典. 读取 ...

随机推荐

  1. 随机森林之Bagging法

    摘要:在随机森林介绍中提到了Bagging方法,这里就具体的学习下bagging方法. Bagging方法是一个统计重采样的技术,它的基础是Bootstrap.基本思想是:利用Bootstrap方法重 ...

  2. 关于RadAsm中GetEnvironmentStrings的BUG。

    今天在asm中不通过msvcrt.inc调用c库. 所以.第一时间就在vc的lib中拷贝了libc.lib问价.加入工程后. 声明.调用如下: 然后.链接报错. libc.lib(crt0.obj) ...

  3. L005-oldboy-mysql-dba-lesson05

    L005-oldboy-mysql-dba-lesson05 在线改表工具:pt-onine-schema-change 来自为知笔记(Wiz)

  4. Nhibernate的log4net和系统的log4net使用技巧

    NHibernate定义了两个logger:NHibernate和NHibernate.SQL.我们可以分别配置这两个logger.在App.config文件中<root>标签前边添加如下 ...

  5. 就要从SDG离职了

    在知乎上看到有个提问,你为什么从盛大离职.我八月份在盛大游戏实习之间,下个星期准备辞职迎接新的挑战.本文也将提到我在盛大实习的经历以及离职的原因.当然,不会涉及很多SDG内部的管理以及技术上的秘密. ...

  6. 安卓项目中使用JSON引发的一个小错误 Multiple dex files define Lorg/apache/commons/collections/Buffer

    原因: 这里添加的jar包和android自带的jar产生了冲突

  7. [Learn Android Studio 汉化教程]第三章:使用 Android Studio 编程

    [Learn Android Studio 汉化教程]第三章:使用 Android Studio 编程 本章包含如何在 Android Studio 中书写或生成代码. Android Studio ...

  8. EXTJS 4.2 资料 控件之Grid 列鼠标悬停提示

    columns: [ { header: }, { header: }, { header: , renderer: function (v, ctx, record) { ctx.tdAttr = ...

  9. 一步步学习ASP.NET MVC3 章节总结

    请注明转载地址:http://www.cnblogs.com/arhat 对于<一步步学习ASP.NET MVC3>系列工15章,那么为了方便大家能够快速的预览,老魏在这里为这个系列提供一 ...

  10. /****************** Attributes ********************/

    /*预定义字符属性的文本.如果钥匙不在字典,然后使用默认值,如下所述. */ 以下属性是IOS6的 NSVerticalGlyphFormAttributeName NS_AVAILABLE_IOS( ...