NSCoder,NSCoding,NSCopying之间的区别

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 }

转载于:https://my.oschina.net/yangtaoaaa/blog/676920

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值