【IPHONE开发-OBJECTC入门学习】对象的归档和解归档
转自:http://blog.csdn.net/java886o/article/details/9046967
- #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;
- }
#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
- #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
#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
- #import "Person.h"
- #define NAME @"NAME"
- #define AGE @"AGE"
- @implementation Person
- @synthesize name;
- @synthesize age;
- - (id) initWithName:(NSString*) _name withAge:(int) _age {
- if (self = [super init]) {
- self.name = _name;
- self.age = _age;
- }
- return self;
- }
- - (void) display {
- NSLog(@"Person Name : %@\t Age :%d",name,age);
- }
- //归档编码
- - (void)encodeWithCoder:(NSCoder *)aCoder {
- [aCoder encodeObject:name forKey:NAME];
- [aCoder encodeInt:age forKey:AGE];
- }
- //解归档解码
- - (id)initWithCoder:(NSCoder *)aDecoder {
- if (self = [super init]) {
- self.name = [aDecoder decodeObjectForKey:NAME];
- self.age = [aDecoder decodeIntForKey:AGE];
- }
- return self;
- }
- @end
【IPHONE开发-OBJECTC入门学习】对象的归档和解归档的更多相关文章
- 【IPHONE开发-OBJECTC入门学习】复制对象,深浅复制
转自:http://blog.csdn.net/java886o/article/details/9046273 #import <Foundation/Foundation.h> int ...
- 【IPHONE开发-OBJECTC入门学习】文件的操作,读写复制文件
转自:http://blog.csdn.net/java886o/article/details/9041547 FileTools.h FileTools.m #import "FileT ...
- swift 之归档和解归档
swift 之归档和解归档 数据持久化的方式有很多种,归档是其中的一种,说起数据持久化的方式,iOS 中基本有以下几种方式:sqlite存储.coredata存储.UserDefault存储.归档.p ...
- iOS:文件归档和解归档的详解和使用
文件归档和解归档: 用途: 所谓文件归档,就是把需要存储的对象数据存储到沙盒的Documents目录下的文件中,即存储到了磁盘上,实现数据的持久性存储和备份.解归档,就是从磁盘上读取该文件下的数据,用 ...
- iOS 数据存储 - 归档和解归档
这里的归档主要是用于自定义类的归档和解档.我们这里使用NSKeyedArchiver和NSKeyedUnarchiver来归档和解档. 注意:自己定义的类需要实现<NSCoding>,如: ...
- HoloLens开发手记 - 入门学习阶段总结
伴随着数月的期待,终于拿到了预订的HoloLens开发者版本套件.随着VR/AR/MR技术的热潮,国内外均对它们的应用与盈利前景持有积极的预期,这也直接导致了国内外当前投资VR/AR/MR技术的热潮. ...
- 开发环境入门 linux基础 (部分) 归档 压缩 Vi编译器 系统分区
归档 压缩 Vi编译器 系统分区 1.使用cat命令进行文件的纵向合并 1) 使用cat命令实现文件的纵向合并: a) 例如:将用户信息数据库文件和组信息数据库文件 ...
- 树莓派开发板入门学习笔记1:[转]资料收集及树莓派系统在Ubuntu安装
参考教程(微雪课堂):http://www.waveshare.net/study/portal.php 树莓派实验室: http://shumeipai.nxez.com/2014/12/21/us ...
- 迅为iTOP-4412物联网开发板入门学习高手进阶项目开发超树莓派
免费视频教程: 为初学者精心录制的整套视频教程全部免费,随IT技术发展而不断增添的视频教程仍然免费!一支有经验的工程师团队会始终成为您的后盾. 项目实战---全开源: 手机远程控制开发板 门禁系统 W ...
随机推荐
- iOS中WebSocket的使用
https://github.com/square/SocketRocket 简单使用如下 1.初始化socket _webSocket = [[SRWebSocket alloc] initWith ...
- 类,接口,final
继承extends 子类实例化过程: 子类中所有的构造方法默认都会访问父类中空参的构造方法 因为每一个子类的构造方法的提议行都有一条默认的语句super(); this super final修饰类, ...
- HBase安装学习
一.下载安装 $ wget http://archive.cloudera.com/cdh5/cdh/5/hbase-1.2.0-cdh5.7.0.tar.gz $ tar -zxvf hbase-1 ...
- bayaim_hadoop1_2.2.0伪分布式搭建
------------------bayaim_hadoop1_2.2.0伪分布式搭建_2018年11月06日09:21:46--------------------------------- 1. ...
- [视频教程] 使用composer安装使用thinkphp6.0框架
安装composer -vvv的参数是表示展示安装进度,测试时使用其他参数安装失败,一直卡着不动curl -vvv https://getcomposer.org/installer | phpmv ...
- jmeter BeanShell的几种使用方式
jmeter的BeanShell Sampler,可以直接引用java代码,有下面3种方式: 1.直接输入java代码:2.导入java文件:3.导入class文件 BeanShell脚本访问变量主要 ...
- HTML与CSS学习笔记(4)
1.浏览器前缀 浏览器厂商以前就一直在实时CSS3,但它还未成为真正的标准.为此,当有一些CSS3样式与法还在波动的时候,他们提出了针对不同浏览器的前缀,来解决兼容性问题. 即:CSS3去兼容不同的浏 ...
- ffmpeg下载m3u8流媒体
安装 编译好的windows可用版本的下载地址(官网中可以连接到这个网站,和官方网站保持同步): http://ffmpeg.zeranoe.com/builds/ 该版本为FFMPEG的Static ...
- 【转】HTTPS建立连接的过程
原文链接:https://www.cnblogs.com/shiqi17/p/9756880.html https://www.jianshu.com/p/bd75ab32ae57 HTTP建立连接的 ...
- 题解:T103342 Problem A. 最近公共祖先
题目链接 题目大意 求每个点对的lca深度的和 以每一层分析,得出通式 由于1e9的数据范围要化简表达式得到O(能过) 瞎搞后就是2^(2n+2)-(4n+2)*2^n-2 code: #includ ...