转自:http://blog.csdn.net/java886o/article/details/9046967

  1. #import <Foundation/Foundation.h>
  2. #import "Person.h"
  3. int main(int argc, const char * argv[])
  4. {
  5. @autoreleasepool {
  6. //-----------第1种归档方式---------
  7. //1.使用NSKeyedArchiver 归档对象到文件(对象序列化,持久化)
  8. NSArray* arrays = [[NSArray alloc]initWithObjects:@"111",@"222", nil];
  9. NSString* userPath = NSHomeDirectoryForUser(@"3g2win");
  10. NSLog(@"userPath=%@",userPath);
  11. NSString* bakFilePath = [userPath stringByAppendingFormat:@"/test.txt"];
  12. NSLog(@"bakFilePath=%@",bakFilePath);
  13. NSLog(@"归档前的数组:\n\n%@",arrays);
  14. //归档
  15. if ([NSKeyedArchiver archiveRootObject:arrays toFile:bakFilePath]){
  16. NSLog(@"归档成功...\n\n");
  17. }else {
  18. NSLog(@"归档失败...\n\n");
  19. }
  20. //2.使用NSKeyedUnarchiver 解归档文件到对象(反序列化)
  21. //解归档
  22. NSArray* srcArr =  [NSKeyedUnarchiver unarchiveObjectWithFile:bakFilePath];
  23. NSLog(@"解归档后的数组:\n\n%@",srcArr);
  24. //------------第2种归档方式---------
  25. //归档
  26. NSMutableData* data = [NSMutableData alloc];
  27. NSKeyedArchiver* archiver = [NSKeyedArchiver alloc];
  28. [archiver initForWritingWithMutableData:data];
  29. [archiver encodeObject:@"张三" forKey:@"name"];
  30. [archiver encodeInt:25 forKey:@"age"];
  31. [archiver encodeFloat:5200.5F forKey:@"money"];
  32. [archiver finishEncoding];
  33. [data writeToFile:@"/Users/3g2win/11111111111.txt" atomically:YES];
  34. //解归档
  35. NSMutableData* data2 = [NSMutableData dataWithContentsOfFile:@"/Users/3g2win/11111111111.txt"];
  36. NSKeyedUnarchiver* unArchiver = [NSKeyedUnarchiver alloc];
  37. [unArchiver initForReadingWithData:data2];
  38. NSLog(@"name=%@",[unArchiver decodeObjectForKey:@"name"]);
  39. NSLog(@"age=%d",[unArchiver decodeIntForKey:@"age"]);
  40. NSLog(@"money=%f",[unArchiver decodeFloatForKey:@"money"]);
  41. //-------------自定义对象的归档和解归档------------
  42. Person* zhao6 = [[Person alloc] initWithName:@"赵六" withAge:18];
  43. [zhao6 display];
  44. //归档
  45. [NSKeyedArchiver archiveRootObject:zhao6 toFile:@"/Users/3g2win/zhao6.txt"];
  46. //解档
  47. Person* newZhao6 = [NSKeyedUnarchiver unarchiveObjectWithFile:@"/Users/3g2win/zhao6.txt"];
  48. [newZhao6 display];
  49. }
  50. return 0;
  51. }
#import <Foundation/Foundation.h>
#import "Person.h" int main(int argc, const char * argv[])
{ @autoreleasepool { //-----------第1种归档方式--------- //1.使用NSKeyedArchiver 归档对象到文件(对象序列化,持久化)
NSArray* arrays = [[NSArray alloc]initWithObjects:@"111",@"222", nil]; NSString* userPath = NSHomeDirectoryForUser(@"3g2win"); NSLog(@"userPath=%@",userPath); NSString* bakFilePath = [userPath stringByAppendingFormat:@"/test.txt"]; NSLog(@"bakFilePath=%@",bakFilePath); NSLog(@"归档前的数组:\n\n%@",arrays); //归档 if ([NSKeyedArchiver archiveRootObject:arrays toFile:bakFilePath]){
NSLog(@"归档成功...\n\n");
}else {
NSLog(@"归档失败...\n\n");
} //2.使用NSKeyedUnarchiver 解归档文件到对象(反序列化)
//解归档
NSArray* srcArr = [NSKeyedUnarchiver unarchiveObjectWithFile:bakFilePath]; NSLog(@"解归档后的数组:\n\n%@",srcArr); //------------第2种归档方式--------- //归档
NSMutableData* data = [NSMutableData alloc];
NSKeyedArchiver* archiver = [NSKeyedArchiver alloc];
[archiver initForWritingWithMutableData:data];
[archiver encodeObject:@"张三" forKey:@"name"];
[archiver encodeInt:25 forKey:@"age"];
[archiver encodeFloat:5200.5F forKey:@"money"];
[archiver finishEncoding];
[data writeToFile:@"/Users/3g2win/11111111111.txt" atomically:YES]; //解归档
NSMutableData* data2 = [NSMutableData dataWithContentsOfFile:@"/Users/3g2win/11111111111.txt"];
NSKeyedUnarchiver* unArchiver = [NSKeyedUnarchiver alloc];
[unArchiver initForReadingWithData:data2]; NSLog(@"name=%@",[unArchiver decodeObjectForKey:@"name"]); NSLog(@"age=%d",[unArchiver decodeIntForKey:@"age"]); NSLog(@"money=%f",[unArchiver decodeFloatForKey:@"money"]); //-------------自定义对象的归档和解归档------------
Person* zhao6 = [[Person alloc] initWithName:@"赵六" withAge:18]; [zhao6 display]; //归档
[NSKeyedArchiver archiveRootObject:zhao6 toFile:@"/Users/3g2win/zhao6.txt"]; //解档 Person* newZhao6 = [NSKeyedUnarchiver unarchiveObjectWithFile:@"/Users/3g2win/zhao6.txt"]; [newZhao6 display]; }
return 0;
}

Person.h

  1. #import <Foundation/Foundation.h>
  2. //必须实现NSCoding协议才能够归档解归档自定义类
  3. @interface Person : NSObject <NSCoding>
  4. {
  5. NSString* name;
  6. int age;
  7. }
  8. @property (nonatomic,assign) NSString* name;
  9. @property (nonatomic,assign) int age;
  10. - (id) initWithName:(NSString*) _name withAge:(int) _age;
  11. - (void) display;
  12. @end
#import <Foundation/Foundation.h>

//必须实现NSCoding协议才能够归档解归档自定义类

@interface Person : NSObject <NSCoding>

{
NSString* name;
int age;
} @property (nonatomic,assign) NSString* name;
@property (nonatomic,assign) int age; - (id) initWithName:(NSString*) _name withAge:(int) _age; - (void) display; @end

Person.m

    1. #import "Person.h"
    2. #define NAME @"NAME"
    3. #define AGE @"AGE"
    4. @implementation Person
    5. @synthesize name;
    6. @synthesize age;
    7. - (id) initWithName:(NSString*) _name withAge:(int) _age {
    8. if (self = [super init]) {
    9. self.name = _name;
    10. self.age = _age;
    11. }
    12. return self;
    13. }
    14. - (void) display {
    15. NSLog(@"Person Name : %@\t Age :%d",name,age);
    16. }
    17. //归档编码
    18. - (void)encodeWithCoder:(NSCoder *)aCoder {
    19. [aCoder encodeObject:name forKey:NAME];
    20. [aCoder encodeInt:age forKey:AGE];
    21. }
    22. //解归档解码
    23. - (id)initWithCoder:(NSCoder *)aDecoder {
    24. if (self = [super init]) {
    25. self.name = [aDecoder decodeObjectForKey:NAME];
    26. self.age = [aDecoder decodeIntForKey:AGE];
    27. }
    28. return self;
    29. }
    30. @end

【IPHONE开发-OBJECTC入门学习】对象的归档和解归档的更多相关文章

  1. 【IPHONE开发-OBJECTC入门学习】复制对象,深浅复制

    转自:http://blog.csdn.net/java886o/article/details/9046273 #import <Foundation/Foundation.h> int ...

  2. 【IPHONE开发-OBJECTC入门学习】文件的操作,读写复制文件

    转自:http://blog.csdn.net/java886o/article/details/9041547 FileTools.h FileTools.m #import "FileT ...

  3. swift 之归档和解归档

    swift 之归档和解归档 数据持久化的方式有很多种,归档是其中的一种,说起数据持久化的方式,iOS 中基本有以下几种方式:sqlite存储.coredata存储.UserDefault存储.归档.p ...

  4. iOS:文件归档和解归档的详解和使用

    文件归档和解归档: 用途: 所谓文件归档,就是把需要存储的对象数据存储到沙盒的Documents目录下的文件中,即存储到了磁盘上,实现数据的持久性存储和备份.解归档,就是从磁盘上读取该文件下的数据,用 ...

  5. iOS 数据存储 - 归档和解归档

    这里的归档主要是用于自定义类的归档和解档.我们这里使用NSKeyedArchiver和NSKeyedUnarchiver来归档和解档. 注意:自己定义的类需要实现<NSCoding>,如: ...

  6. HoloLens开发手记 - 入门学习阶段总结

    伴随着数月的期待,终于拿到了预订的HoloLens开发者版本套件.随着VR/AR/MR技术的热潮,国内外均对它们的应用与盈利前景持有积极的预期,这也直接导致了国内外当前投资VR/AR/MR技术的热潮. ...

  7. 开发环境入门 linux基础 (部分) 归档 压缩 Vi编译器 系统分区

    归档 压缩 Vi编译器 系统分区 1.使用cat命令进行文件的纵向合并          1) 使用cat命令实现文件的纵向合并:          a) 例如:将用户信息数据库文件和组信息数据库文件 ...

  8. 树莓派开发板入门学习笔记1:[转]资料收集及树莓派系统在Ubuntu安装

    参考教程(微雪课堂):http://www.waveshare.net/study/portal.php 树莓派实验室: http://shumeipai.nxez.com/2014/12/21/us ...

  9. 迅为iTOP-4412物联网开发板入门学习高手进阶项目开发超树莓派

    免费视频教程: 为初学者精心录制的整套视频教程全部免费,随IT技术发展而不断增添的视频教程仍然免费!一支有经验的工程师团队会始终成为您的后盾. 项目实战---全开源: 手机远程控制开发板 门禁系统 W ...

随机推荐

  1. ABP进阶教程4 - 分页排序

    点这里进入ABP进阶教程目录 下载插件 打开Datatables官网(https://datatables.net/download/) 下载插件,复制到JD.CRS.Web.Mvc\wwwroot\ ...

  2. python3+Scrapy爬虫使用pipeline数据保存到文本和数据库,数据少或者数据重复问题

    爬取的数据结果是没有错的,但是在保存数据的时候出错了,出现重复数据或者数据少问题.那为什么会造成这种结果呢? 其原因是由于Spider的速率比较快,而scapy操作数据库操作比较慢,导致pipelin ...

  3. Hadoop序列化案例实操

    需求 统计每一个手机号耗费的总上行流量.下行流量.总流量. 输入数据: 1 13736230513 192.196.100.1 www.atguigu.com 2481 24681 200 2 138 ...

  4. 谈谈你对OOM的理解?

    (1)整体架构 (1)ByteBuffer使用native方法,直接在堆外分配内存. 当堆外内存(也即本地物理内存)不够时,就会抛出这个异常     ----GC Direct buffer memo ...

  5. Http响应乱码

    Http响应乱码 方案1 response.setHeader("Content-Type", "application/json"); response.se ...

  6. Node.js中的模块接口module.exports

    在写node.js代码时,我们经常需要自己写模块(module).同时还需要在模块最后写好模块接口,声明这个模块对外暴露什么内容.实际上,node.js的模块接口有多种不同写法.在此做了个简单的总结. ...

  7. Paper | Beyond a Gaussian Denoiser: Residual Learning of Deep CNN for Image Denoising

    目录 故事背景 网络结构 BN和残差学习 拓展到其他任务 发表在2017 TIP. 摘要 Discriminative model learning for image denoising has b ...

  8. 爬虫——控制台抓包和requests.post()发送请求

    控制台抓包 打开方式及常用选项 1.打开浏览器,F12打开控制台,找到Network选项卡 2.控制台常用选项 1.Network: 抓取网络数据包 1.ALL: 抓取所有的网络数据包 2.XHR:抓 ...

  9. Pencil 基于Electron的GUI原型工具之菜单三探 印象笔记同步

    今天一鼓作气实现Pencil整合印象笔记同步的功能. 缘起,像Sketch或者Adobe XD等一些工具都开始陆续支持整合阿里巴巴的"语雀"云服务,将设计文档同步到云端,便于团队协 ...

  10. 微信小程序开发-蓝牙功能开发

    0. 前言 这两天刚好了解了一下微信小程序的蓝牙功能.主要用于配网功能.发现微信的小程序蓝牙API已经封装的很好了.编程起来很方便.什么蓝牙知识都不懂的情况下,不到两天就晚上数据的收发了,剩下的就是数 ...