NSArray实现深拷贝
来源:互联网 发布:明星语音模拟软件 编辑:程序博客网 时间:2024/05/22 02:15
我为我自定义的类,实现NSCopying协议,实现了深拷贝。
但是,我想对NSArray实现深拷贝!也就是说,我想把 深拷贝和浅拷贝的理解(一)-Object-C
中的NSArray实现深拷贝!
难题来了,难道我要重写NSArray类,让其实现NSCopying协议嘛?!
也许,还有更好的办法吧!
当我学会了 归档(archive)文件(二)
用NSData进行归档后,
我发现,可以用NSData提供的内存缓冲区,为NSArray实现深拷贝!
直接贴代码:
NSMutableArray *objArray=[NSMutableArray arrayWithObjects:
card1,
card2,
nil];
NSMutableArray *objArray2;
// NSData *data=[NSKeyedArchiver archivedDataWithRootObject:objArray];
// objArray2=[NSKeyedUnarchiver unarchiveObjectWithData:data];
objArray2=[NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiverarchivedDataWithRootObject:objArray]];
// 输出objArray
NSLog(@"objArray: ");
for (AddressCard *theCard in objArray) {
[theCard print];
}
2012-12-09 22:07:11.536 DemoVideo[608:1b803] objArray:
2012-12-09 22:07:11.536 DemoVideo[608:1b803] =====================
2012-12-09 22:07:11.536 DemoVideo[608:1b803] name=Tom
2012-12-09 22:07:11.536 DemoVideo[608:1b803] email=Tom@yahoo.cn
2012-12-09 22:07:11.537 DemoVideo[608:1b803] =====================
2012-12-09 22:07:11.537 DemoVideo[608:1b803] =====================
2012-12-09 22:07:11.537 DemoVideo[608:1b803] name=LiLei
2012-12-09 22:07:11.537 DemoVideo[608:1b803] email=LiLei@yahoo.cn
2012-12-09 22:07:11.537 DemoVideo[608:1b803] =====================
// 输出objArray2
NSLog(@"objArray2: ");
for (AddressCard *theCard in objArray2) {
[theCard print];
}
2012-12-09 22:07:11.538 DemoVideo[608:1b803] objArray2:
2012-12-09 22:07:11.538 DemoVideo[608:1b803] =====================
2012-12-09 22:07:11.538 DemoVideo[608:1b803] name=Tom
2012-12-09 22:07:11.538 DemoVideo[608:1b803] email=Tom@yahoo.cn
2012-12-09 22:07:11.538 DemoVideo[608:1b803] =====================
2012-12-09 22:07:11.539 DemoVideo[608:1b803] =====================
2012-12-09 22:07:11.540 DemoVideo[608:1b803] name=LiLei
2012-12-09 22:07:11.540 DemoVideo[608:1b803] email=LiLei@yahoo.cn
2012-12-09 22:07:11.540 DemoVideo[608:1b803] =====================
// 修改了objArray中的第一个元素
AddressCard *tempCard=[objArray objectAtIndex:0];
tempCard.name=@"CarBoon";
tempCard.email=@"CarBoon@yahoo.cn";
// 输出objArray
NSLog(@"objArray: ");
for (AddressCard *theCard in objArray) {
[theCard print];
}
2012-12-09 22:07:11.541 DemoVideo[608:1b803] objArray:
2012-12-09 22:07:11.541 DemoVideo[608:1b803] =====================
2012-12-09 22:07:11.541 DemoVideo[608:1b803] name=CarBoon
2012-12-09 22:07:11.541 DemoVideo[608:1b803] email=CarBoon@yahoo.cn
2012-12-09 22:07:11.541 DemoVideo[608:1b803] =====================
2012-12-09 22:07:11.542 DemoVideo[608:1b803] =====================
2012-12-09 22:07:11.542 DemoVideo[608:1b803] name=LiLei
2012-12-09 22:07:11.543 DemoVideo[608:1b803] email=LiLei@yahoo.cn
2012-12-09 22:07:11.543 DemoVideo[608:1b803] =====================
// 输出objArray2
NSLog(@"objArray2: ");
for (AddressCard *theCard in objArray2) {
[theCard print];
}
2012-12-09 22:07:11.544 DemoVideo[608:1b803] objArray2:
2012-12-09 22:07:11.544 DemoVideo[608:1b803] =====================
2012-12-09 22:07:11.544 DemoVideo[608:1b803] name=Tom
2012-12-09 22:07:11.545 DemoVideo[608:1b803] email=Tom@yahoo.cn
2012-12-09 22:07:11.545 DemoVideo[608:1b803] =====================
2012-12-09 22:07:11.545 DemoVideo[608:1b803] =====================
2012-12-09 22:07:11.545 DemoVideo[608:1b803] name=LiLei
2012-12-09 22:07:11.546 DemoVideo[608:1b803] email=LiLei@yahoo.cn
2012-12-09 22:07:11.546 DemoVideo[608:1b803] =====================
因为在归档/反归档 过程中产生的是全新副本!并且在内存中完成!
以后,要生成一个对象的深拷贝时,如果该对象不支持NSCopying协议时,可以用这种方法来实现深拷贝!
- NSArray实现深拷贝
- 数组NSArray的浅拷贝与深拷贝
- OC的深拷贝与浅拷贝--NSArray与NSMutableArray应该使用copy还是strong?
- Deep NSArray Mutable Copy Category behaviour (nsarray 深度拷贝)
- 深拷贝的实现
- 反射实现深拷贝
- JavaScript 实现深拷贝
- js实现深拷贝
- 深拷贝的实现
- js实现深拷贝
- js实现深拷贝
- Javascript浅拷贝与深拷贝实现
- Javascript浅拷贝与深拷贝实现
- 深拷贝与浅拷贝的实现
- Js实现深拷贝和浅拷贝
- JavaScript实现深拷贝与浅拷贝
- 浅拷贝与深拷贝、以及深拷贝的实现
- NSMutableArray与NSArray的相互拷贝
- 在tomcat下部署工程方式
- hdoj1071积分求面积
- Android开发在string.xml文件中设置部分字体颜色大小
- 基础总结篇之三:Activity的task相关
- unity3d---案例分析
- NSArray实现深拷贝
- PHP设计模式——数据访问对象模式
- linux的IO复用技术:select、poll、epoll的区别以及epoll的原理和使用
- 每天一个linux命令:ifconfig命令
- 高职“大学语文”教学改革中质量控制的具体实施
- 自定义对象归档、解档
- 苹果 App Store 软件发布鱼教程
- 远程访问mysql
- 【Android】ListView中EditText焦点问题