文档章节

NSCoder,NSCoding,NSCopying之间的区别

杨桃aaa
 杨桃aaa
发布于 2016/05/17 21:13
字数 377
阅读 104
收藏 0
点赞 2
评论 0

NScoding 是一个协议,主要有下面两个方法

1)-(id)initWithCoder:(NSCoder *)coder;//从coder中读取数据,保存到相应的变量中,即反序列化数据

2)-(void)encodeWithCoder:(NSCoder *)coder;// 读取实例变量,并把这些数据写到coder中去。序列化数据

一般是在自己定义的类中需要在.h 文件中加入<NScoding>

在.m 文件众实现他的的两个代理方法,这个代理方法将会被自动调用

1 - (void)encodeWithCoder:(NSCoder *)aCoder 
2 {
3     [aCoder encodeObject:self.InsureSolutionID forKey:@"personName"];
4     [aCoder encodeObject:self.InsureSolutionName forKey:@"personAge"];
5 }

encodeWithCoder 可以调用的方法:

1)、如果是类 就用encodeObject: forKey:

2)、如果是普通的数据类型就用   eg、encodeInt: forKey:

1 - (id)initWithCoder:(NSCoder *)aDecoder 
 2 
 3 {
 4     self = [super init];
 5     if (self) 
 6     {
 7         self.InsureSolutionID = [aDecoder decodeObjectForKey:@"personName"];
 8         self.InsureSolutionName = [aDecoder decodeObjectForKey:@"personAge"];
 9     }
10     return self;
11 }
12 
13

 

initWithCoder 可以调用的方法:

1)、如果是类 就用decodeObjectForKey:

2)、如果是普通的数据类型就用   eg、decodeIntForKey:

以下是对该类序列化和反序列化。

1 NSData *archiveCarPriceData = [NSKeyedArchiver archivedDataWithRootObject:self.DataArray];
2     [[NSUserDefaults standardUserDefaults] setObject:archiveCarPriceData forKey:@"DataArray"];
3  
4 
5  NSData *myEncodedObject = [[NSUserDefaults standardUserDefaults] objectForKey:@"DataArray"];
6      self.dataList = [NSKeyedUnarchiver unarchiveObjectWithData: myEncodedObject];

例子参考这个文章:http://www.cnblogs.com/jay-dong/archive/2013/01/31/2887305.html

NSCopying协议:

一个方法:

zone是一个内存区域,通常object,指向指针,所以copywithzone重要。

1 - (id)copyWithZone:(NSZone *)zone
 2 
 3 {
 4 
 5     FourLines *copy = [[[self class] allocWithZone:zone] init];
 6 
 7     copy.field1 = [self.field1 copyWithZone:zone];
 8 
 9     copy.field2 = [self.field2 copyWithZone:zone];
10 
11     copy.field3 = [self.field3 copyWithZone:zone];
12 
13     copy.field4 = [self.field4 copyWithZone:zone];
14 
15     return copy;
16 
17 }

© 著作权归作者所有

共有 人打赏支持
杨桃aaa
粉丝 12
博文 15
码字总数 26515
作品 0
松江
程序员
IOS 序列化与反序列化NSKeyedUnarchiver

开篇 1到底这个序列化有何作用? 面向对象的程序在运行的时候会创建一个复杂的对象图,经常要以二进制的方法序列化这个对象图,这个过程叫做Archiving. 二进制流可以通过网络或写入文件中。 ...

今日竹石 ⋅ 2014/01/23 ⋅ 0

iOS中常用的四种数据持久化方法简介

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

Jack088 ⋅ 2016/02/02 ⋅ 0

iOS 数据持久化之plist

library目录和document目录 关于这两个目录的区别我之前写过,这里还是再提一下: document是那些暴露给用户的数据文件,用户可见,可读写; library目录是App替用户管理的数据文件,对用户透...

河神丶c ⋅ 06/13 ⋅ 0

iOS的归档(archive)和解档(unarchive)

在面向对象的编程中,会涉及到对象的保存,对象的保存在JAVA当中称之为serialize,也叫序列化。而在cocoa当中,这个过程称之为归档。cocoa当中最最典型的序列化例子就是NIB文件的保存和读取过...

水一样的人儿 ⋅ 2016/01/15 ⋅ 0

Method 'copyWithZone:' in protocol not implemented

警告如下 解决办法:仔细查查是不是继承错了协议,以为:NSCopying和NSCoding实在是太像了,(我们要继承的是NSCoding不是NSCopying)不仔细根本查不出来

不孤独的美食家 ⋅ 2015/10/20 ⋅ 2

OC归档的对象里面包括其他类的属性!

main.m #import <Foundation/Foundation.h> #import "FJPerson.h" #import "FJCar.h" #define PATH @"/Users/IOS1601/Desktop/plist文件/personCar" //如果需要归档的对象的属性中又另外一个......

鹿微微鹿 ⋅ 2016/04/01 ⋅ 0

数据持久化二之对象解归档

前面讲了属性列表,这里继续讲ios数据持久化二之对象的解归档,之前博客也有讲到,可以查看; 二。对象解归档 要使用对象归档,对象就必须遵守NSCoding协议,大部分OC对象都遵守NSCoding协议...

鹿微微鹿 ⋅ 2016/06/29 ⋅ 0

runtime序列化与反序列化

使用简单的数据存储有时候需要用到 NSCoding协议 实现其 encodeWithCoder 与 initWithCoder 方法 一般实现的姿势是这样的: 但是这样会有一个缺陷, 如果我们想加一个属性, 就要再在NSCoding代...

小鹏GG丶 ⋅ 06/14 ⋅ 0

M13OrderedDictionary

M13OrderedDictionary 介于 NSArray 和 NSDictionary 之间,它有一个有序的对象列表和关键字,所有这些都能被索引和关键字访问。它仅仅完整的实现了 Objective C 的有序目录类,遵从苹果的子...

叶秀兰 ⋅ 2014/02/17 ⋅ 0

iOS的编程基础

三个重要方面 根类和其相关协议 值类 集合类 ---- 根类------ 根类 NSObject 根类 的 NSCopying、NSMutableCopying、NSCoding 协议 ---------- 用对象模式进行思考 所有东西都是对象...

zhmsong ⋅ 2012/11/27 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Mahout基于内存的DataMode 推荐引擎Demo2

Mahout基于内存的DataMode 推荐引擎Demo2 //注释的部分是基于文件也可以理解为基于日志文件的, //DataModel 可以有很多种,实现abstractDataMode的子类,原则上都可以作为数据源,个人觉得,...

xiaomin0322 ⋅ 16分钟前 ⋅ 0

Docker部署Tomcat及Web应用

一、在线下载docker yum install -y epel-releaseyum install docker-io # 安装dockerchkconfig docker on # 加入开机启动service docker start # 启动docker服务 1 ...

Jeam_ ⋅ 16分钟前 ⋅ 0

研发运营一体化能力成熟度模型

研发运营一体化是指在 IT 软件及相关服务的研发及交付过程中,将应用的需求、开发、测试、部 署和运营统一起来,基于整个组织的协作和应用架构的优化,实现敏捷开发、持续交付和应用运营的无...

stars永恒 ⋅ 21分钟前 ⋅ 0

jQuery缩小放大触发事件

jquery的resize()方法使用 <html> <head> <script type="text/javascript" src="/jquery/jquery.js"></script> <script type="text/javascript"> var i = 0; $(document).ready(function(){ ......

RobertZou ⋅ 22分钟前 ⋅ 0

eclipse python 搭建

https://jingyan.baidu.com/article/9113f81b68ebce2b3214c7e0.html https://www.cnblogs.com/ZhangRuoXu/p/6397756.html https://blog.csdn.net/zhangphil/article/details/78962159 字符集......

之渊 ⋅ 22分钟前 ⋅ 0

weex,react native,flutter

weex: 一次编写,处处运行 RN: 学一次,到处写(针对安卓,IOS平台特性 各自写,会有很大一部分是一样的代码) 这些方案是否真正的解决了跨平台问题呢?从目前的状况来看,很显然是没有的,因...

东东笔记 ⋅ 28分钟前 ⋅ 0

Spring Cloud微服务分布式云架构-集成项目

Spring Cloud集成项目有很多,下面我们列举一下和Spring Cloud相关的优秀项目,我们的企业架构中用到了很多的优秀项目,说白了,也是站在巨人的肩膀上去整合的。在学习Spring Cloud之前大家必...

明理萝 ⋅ 33分钟前 ⋅ 1

SpringMVC图片上传问题解决

当我们上传图片时一直发现: MultipartFile file = null; if (request instanceof MultipartHttpServletRequest) 匹配不上, 解决方案: 在前端xml加入如下配置代码即可 <!-- 图片上传bean --...

泉天下 ⋅ 35分钟前 ⋅ 0

Spring表达式语言(SpEL)

1、SpEL引用 Spring EL在bean创建时执行其中的表达式。此外,所有的Spring表达式都可以通过XML或注解的方式实现。下面将使用Spring表达式语言(SpEL),注入字符串,整数,Bean到属性。 SpEL的...

霍淇滨 ⋅ 51分钟前 ⋅ 0

Gradle使用阿里云镜像

gradle 生命周期中有一个初始化( Initialization )的过程,这个过程运行在 build script 之前,我们可以在这个地方做一点系统全局的设置,如配置仓库地址。 你可以在以下几个位置实现仓库地址...

明MikeWoo ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部