博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS对象的序列化
阅读量:4109 次
发布时间:2019-05-25

本文共 1714 字,大约阅读时间需要 5 分钟。

当你于写数据需要本地存储时,即将你的数据写到硬盘上的时候,你就必须对他进行序列化,转换成二进制文件,从而便于在磁盘上的读写,同理在取出的时候必须将其在反序列化,这样才能将数据读出来,就好比加密和揭秘的过程。比如NSUserDefaults只支持: NSString, NSNumber, NSDate, NSArray, NSDictionary.如果把一个自定义的类存到一个NSArray里,然后再存到NSUserDefaults里也是不能成功的,就必须先序列化。

系统对象序列化

Apple自带的一些对象,比如NSString、NSArray、NSData、NSDictionary可直接通过调用writeToFile进行归档,因为他们本身已经都实现了NSCoding协议。

自定义对象序列化

那么OBJC自定义对象如何序列化呢?

首先实现NSCoding协议,重写encodeWithCode方法和initWithCode方法,然后通过NSKeyedArchiver转换为NSData,然后通过NSData的writeToFile方法写入到文件,或者将转换后的NSData放入到NSArray或NSDictionary中调用writeToFile写入到文件便可实现包装了自定义类型的数据和字典的归档;通过NSKeyedUnarchiver读取归档文件到对象,或者通过NSArray的arrrayWithContentsOfFile或NSDictionary的dictionaryWithContentsOfFile到数组对象或字典,然后取出序列化过的自定义对象(即自定义对象的NSData形式),然后通过NSKeyedUnarchiver反归档到对象。

比如:

@interface BusinessCard : NSObject 
{ NSString *_firstName; NSString *_lastName; } @property (nonatomic, retain) NSString *_firstName; @property (nonatomic, retain) NSString *_lastName; @end; @implementation BusinessCard @synthesize _firstName, _lastName; - (void)dealloc{ [_firstName release]; [_lastName release]; [super dealloc]; } - (id) initWithCoder: (NSCoder *)coder { if (self = [super init]) { self._firstName = [coder decodeObjectForKey:@"_firstName"]; self._lastName = [coder decodeObjectForKey:@"_lastName"]; } return self; } - (void) encodeWithCoder: (NSCoder *)coder { [coder encodeObject:_firstName forKey:@"_firstName"]; [coder encodeObject:_lastName forKey:@"_lastName"]; } @end
归档:

BusinessCard *bc = nil;  bc = [NSKeyedUnarchiver unarchiveObjectWithData:udObject] ;

解析:

bc = [[BusinessCard alloc] init];  NSData *udObject = [NSKeyedArchiver archivedDataWithRootObject:bc];

转载地址:http://qsvsi.baihongyu.com/

你可能感兴趣的文章
ubuntu学习笔记--不断更新中
查看>>
mac 安装 tomcat 配置
查看>>
linux下正确安装jsoncpp
查看>>
document.body.scrollTop等常见易混淆属性整理
查看>>
基于EasyUI的软件框架打造-树(Tree)封装
查看>>
关于模板该不该用css强制编辑器文本开头空两格
查看>>
KMP 算法实现
查看>>
《图解 HTTP》 学习笔记
查看>>
webpack小白入门之文件监听,热更新,文件指纹,代码压缩【1-4】
查看>>
Objective-C Runtime:消息转发机制
查看>>
微信小程序picker隐藏年份
查看>>
快速了解 React Hooks 原理
查看>>
响应式布局
查看>>
百度云下载工具分享
查看>>
spark on yarn任务提交缓慢解决
查看>>
Filco圣手二代双模蓝牙机械键盘的连接方法
查看>>
pyspark学习笔记
查看>>
JDK源码那些事儿之PriorityBlockingQueue
查看>>
Docker那些事儿之镜像创建
查看>>
Docker那些事儿之编排工具docker-compose
查看>>