NSCoder,NSCoding,NSCopying之间的区别
NSCoder,NSCoding,NSCopying之间的区别
杨桃aaa 发表于2年前
NSCoder,NSCoding,NSCopying之间的区别
  • 发表于 2年前
  • 阅读 70
  • 收藏 0
  • 点赞 2
  • 评论 0
摘要: 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 }
共有 人打赏支持
粉丝 13
博文 15
码字总数 26515
×
杨桃aaa
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: