文档章节

NSCoder,NSCoding,NSCopying之间的区别

杨桃aaa
 杨桃aaa
发布于 2016/05/17 21:13
字数 377
阅读 124
收藏 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

没有更多内容

加载失败,请刷新页面

加载更多

原型模式

1、原型模式-定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 克隆(浅度克隆->拷贝值类型或者引用,深度克隆->创建新的对象,开辟新的内存) 例如客户端知道抽象Pro...

阿元
今天
6
0
awk命令扩展使用操作

awk 中使用外部shell变量 示例1 [root@centos01 t1022]# A=888[root@centos01 t1022]# echo "" | awk -v GET_A=$A '{print GET_A}'888[root@centos01 t1022]# echo "aaaaaaaaaaaaa" | aw......

野雪球
今天
13
0
深入解析MySQL视图VIEW

Q:什么是视图?视图是干什么用的? A:视图(view)是一种虚拟存在的表,是一个逻辑表,本身并不包含数据。作为一个select语句保存在数据字典中的。   通过视图,可以展现基表的部分数据;...

IT--小哥
今天
18
0
虚拟机学习之二:垃圾收集器和内存分配策略

1.对象是否可回收 1.1引用计数算法 引用计数算法:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时候计数器值为0的对象就是不可能...

贾峰uk
今天
12
0
smart-doc功能使用介绍

smart-doc从8月份底开始开源发布到目前为止已经迭代了几个版本。在这里非常感谢那些敢于用smart-doc去做尝试并积极提出建议的社区用户。因此决定在本博客中重要说明下smart-doc的功能,包括使...

上官胡闹
昨天
22
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部