文档章节

NSCoder,NSCoding,NSCopying之间的区别

杨桃aaa
 杨桃aaa
发布于 2016/05/17 21:13
字数 377
阅读 112
收藏 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
0
iOS中常用的四种数据持久化方法简介

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

Jack088
2016/02/02
35
0
iOS 数据持久化之plist

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

河神丶c
06/13
0
0
iOS的归档(archive)和解档(unarchive)

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

水一样的人儿
2016/01/15
132
0
Method 'copyWithZone:' in protocol not implemented

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

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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring Aop原理之切点表达式解析

在前面的文章(Spring AOP切点表达式详解)中,我们总结了Spring Aop切点表达式的用法,而在上文(Spring Aop原理之Advisor过滤)中我们讲到,切点表达式的解析主要是在PatternParser.parse...

爱宝贝丶
16分钟前
0
0
网络工程师真的也需要好好学习linux系统

作为一名刚工作半年的小网工,想总结一下工作半年来的一些感悟。由于本人是网络工程专业,毕业前找工作的目标也是网络工程师,在经过几次面试后如愿以偿的找到了网络工程师的工作。由于上学时...

linuxprobe16
22分钟前
0
0
RabbitMQ在CentOS环境安装

1.废话不多说准备一台虚拟机,系统为centos,我这里使用的系统版本如下图所示:

凌晨一点
59分钟前
0
0
线程池相关

在java.util.concurrent包下,提供了一系列与线程池相关的类。 使用线程池的好处 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗; 提高响应速度。当任务到达时,任务...

edwardGe
今天
0
0
学习大数据这三个关键技术是一定要掌握!

大数据时代全面来临,大数据、人工智能等技术引领科技创新潮流,获得国家政策大力支持,前景广阔。学习大数据技术的人自然是络绎不绝, 学习大数据虽然是一个趋势,但也要注意大数据培训课程...

董黎明
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部