使用归档来创建对象的深复制
来源:互联网 发布:电脑重装数据恢复 编辑:程序博客网 时间:2024/06/15 07:13
//使用Foundation的归档功能来创建对象的深复制
例如:Person类
Person.h
@interface Person : NSObject <NSCoding>
@property (nonatomic,copy)NSString *name;
@property (assign)int age;
- (id)initWithName:(NSString *)name withAge:(int)age;
Person.m
- (id)initWithName:(NSString *)name withAge:(int)age{
if(self = [super init])
{
self.name = name;
self.age = age;
}
return self;
}
- (void)encodeWithCoder:(NSCoder *)aCoder{ //NSCoding协议必须实现的方法
[aCoder encodeObject:self.name forKey:@"name"];
[aCoder encodeInt:self.age forKey:@"age"];
}
- (id)initWithCoder:(NSCoder *)aDecoder{ //NSCoding协议必须实现的方法
if(self = [super init])
{
self.name = [aDecoder decodeObjectForKey:@"name"];
self.age = [aDecoder decodeIntForKey:@"age"];
}
return self;
}
main函数
int main(int argc, const char * argv[])
{
@autoreleasepool {
NSMutableArray *mArray = [NSMutableArray array];
NSMutableString *str1 = [NSMutableString stringWithString:@"one"];
NSMutableString *str2 = [NSMutableString stringWithString:@"two"];
NSMutableString *str3 = [NSMutableString stringWithString:@"three"];
Person *person = [[Person alloc]initWithName:@"yangcw" withAge:22];
[mArray addObject:str1];
[mArray addObject:str2];
[mArray addObject:str3];
[mArray addObject:person];
//自定义类需要使用NSKeyedArchiver
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:mArray];
NSArray *dataArray = [NSKeyedUnarchiver unarchiveObjectWithData:data];
[str1 appendString:@"ONE"];
NSLog(@"mArray = %@ 地址=%p",mArray,mArray);
NSLog(@"array = %@ 地址=%p",dataArray,dataArray);
//结果显示person地址和数组地址都不一样
}
return 0;
}
//输出
2014-08-02 09:13:08.551 ycw_0801_2[433:303] mArray = (
oneONE,
two,
three,
"<Person: 0x10010bde0>"
) 地址=0x10010bd30
2014-08-02 09:13:08.553 ycw_0801_2[433:303] array = (
one,
two,
three,
"<Person: 0x10010a520>"
) 地址=0x10010f9b0
- 使用归档来创建对象的深复制
- iOS深复制(利用归档来实现深复制对象)
- OC视频笔记-对象的复制与归档
- 复制对象、对象归档和单例
- ObjC学习11-复制对象与归档
- 使用ioc来创建对象有三种方式
- 对象的复制:浅复制(clone()方法的使用)+深复制
- 使用runtime归档模型对象
- iOS 浅赋值、深复制、完全复制的知识点梳理验证(附加归档解档)
- iOS 浅赋值、深复制、完全复制的知识点梳理验证(附加归档解档)
- 对象的浅复制与深复制
- 对象的深复制和浅复制
- 使用不同的方法来创建对象和生成原型链
- js 对象深复制,创建对象和继承
- js 对象深复制,创建对象和继承
- iOS 归档的使用
- NSKeyedArchiver归档的使用
- NSKeyedArchiver/NSKeyedUnarchiver归档解归档的使用
- iOS下用一行代码实现tableview(collectionview)的parallax效果
- TP-LINK WR703N 刷OpenWrt并设置pppoe联网、安装LUCI、添加新用户、挂载USB设备、配置ftp服务、借由transmission实现脱机下载
- 菜鸟的安卓实习之路---采用preferenceFragment布局
- CSS编码规范(二)
- Charm Bracelet poj 3624 (01) 背包问题 c++
- 使用归档来创建对象的深复制
- socket套接字TCP API说明
- hibernate-Query.list()与Query.iterate()比较
- 模版解析
- 对一段Oracle GoldenGate (OGG) 传输进程日志(.rpt文件)的解释
- UI05-学习笔记
- 分数加减法 poj 3979
- Codeforces Round #259 (Div. 2) C Little Pony and Expected Maximum
- 自定义类的copy实现(实现NSCopying协议)