用一句简单的话来说就是: 浅拷贝只是对指针的拷贝,拷贝后两个指针指向同一个内存空间;深拷贝不但对指针进行拷贝,而且对指针指向的内容进行拷贝,经深拷贝后的指针是指向两个不同地址的指针。系统默认的浅拷贝。想要实现深拷贝需要自己遵守NSCopying协议和NSMutableCopying协议并且重写方法。
用demo来演示一下:
自定义实体类(一)
NSString *aName=[[NSString alloc] initWithString:@"Tom"];
自定义实体类(二)
NSString *bName=[[NSString alloc] initWithString:@"LiLei"];
AddressCard *card1=[[AddressCard alloc] init];
[card1 setName:aName andEmail:aEmail andSalary:aSalary];
NSMutableArray *objArray=[NSMutableArray arrayWithObjects:
NSMutableArray *objArray2=[objArray mutableCopy];
// 输出objArray
2012-12-07 23:06:37.708 DemoVideo[699:1b803] objArray:
2012-12-07 23:06:37.709 DemoVideo[699:1b803] =====================
2012-12-07 23:06:37.709 DemoVideo[699:1b803] name=Tom
2012-12-07 23:06:37.709 DemoVideo[699:1b803] email=Tom@yahoo.cn
2012-12-07 23:06:37.709 DemoVideo[699:1b803] =====================
2012-12-07 23:06:37.710 DemoVideo[699:1b803] =====================
2012-12-07 23:06:37.710 DemoVideo[699:1b803] name=LiLei
2012-12-07 23:06:37.710 DemoVideo[699:1b803] email=LiLei@yahoo.cn
2012-12-07 23:06:37.711 DemoVideo[699:1b803] =====================
// 输出objArray2
2012-12-07 23:07:36.547 DemoVideo[699:1b803] objArray2:
2012-12-07 23:07:36.547 DemoVideo[699:1b803] =====================
2012-12-07 23:07:36.547 DemoVideo[699:1b803] name=Tom
2012-12-07 23:07:36.548 DemoVideo[699:1b803] email=Tom@yahoo.cn
2012-12-07 23:07:36.548 DemoVideo[699:1b803] =====================
2012-12-07 23:07:36.548 DemoVideo[699:1b803] =====================
2012-12-07 23:07:36.548 DemoVideo[699:1b803] name=LiLei
2012-12-07 23:07:36.549 DemoVideo[699:1b803] email=LiLei@yahoo.cn
2012-12-07 23:07:36.549 DemoVideo[699:1b803] =====================
// 改变card1的值
tempCard.name=@"CarBoon";
2012-12-07 23:07:50.844 DemoVideo[699:1b803] =====================
2012-12-07 23:07:50.844 DemoVideo[699:1b803] name=CarBoon
2012-12-07 23:07:50.844 DemoVideo[699:1b803] email=CarBoon@yahoo.cn
2012-12-07 23:07:50.845 DemoVideo[699:1b803] =====================
2012-12-07 23:08:14.460 DemoVideo[699:1b803] objArray:
2012-12-07 23:08:14.460 DemoVideo[699:1b803] =====================
2012-12-07 23:08:14.461 DemoVideo[699:1b803] name=CarBoon
2012-12-07 23:08:14.461 DemoVideo[699:1b803] email=CarBoon@yahoo.cn
2012-12-07 23:08:14.461 DemoVideo[699:1b803] =====================
2012-12-07 23:08:14.461 DemoVideo[699:1b803] =====================
2012-12-07 23:08:14.461 DemoVideo[699:1b803] name=LiLei
2012-12-07 23:08:14.462 DemoVideo[699:1b803] email=LiLei@yahoo.cn
2012-12-07 23:08:14.462 DemoVideo[699:1b803] =====================
2012-12-07 23:08:44.689 DemoVideo[699:1b803] objArray2:
2012-12-07 23:08:45.493 DemoVideo[699:1b803] =====================
2012-12-07 23:08:45.493 DemoVideo[699:1b803] name=CarBoon
2012-12-07 23:08:45.493 DemoVideo[699:1b803] email=CarBoon@yahoo.cn
2012-12-07 23:08:45.493 DemoVideo[699:1b803] =====================
2012-12-07 23:08:46.021 DemoVideo[699:1b803] =====================
2012-12-07 23:08:46.021 DemoVideo[699:1b803] name=LiLei
2012-12-07 23:08:46.021 DemoVideo[699:1b803] email=LiLei@yahoo.cn
2012-12-07 23:08:46.021 DemoVideo[699:1b803] =====================
- (id)copyWithZone:(NSZone *)zone;
- (id)mutableCopyWithZone:(NSZone *)zone;
@interface AddressCard : NSObject<</span>NSCopying,NSMutableCopying>
#pragma mark- NSCopying
- (id)copyWithZone:(NSZone *)zone{
}
#pragma mark- NSMutableCopying
- (id)mutableCopyWithZone:(NSZone *)zone{
}
AddressCard *cloneCard=[card1 copy];
2012-12-08 22:31:06.206 DemoVideo[464:1b803] =====================
2012-12-08 22:31:06.207 DemoVideo[464:1b803] name=Tom
2012-12-08 22:31:06.207 DemoVideo[464:1b803] email=Tom@yahoo.cn
2012-12-08 22:31:06.207 DemoVideo[464:1b803] =====================
2012-12-08 22:31:06.207 DemoVideo[464:1b803] =====================
2012-12-08 22:31:06.207 DemoVideo[464:1b803] name=changeValue
2012-12-08 22:31:06.207 DemoVideo[464:1b803] email=changeValue@yahoo.cn
2012-12-08 22:31:06.208 DemoVideo[464:1b803] =====================
2012-12-08 22:31:22.731 DemoVideo[464:1b803] =====================
2012-12-08 22:31:22.731 DemoVideo[464:1b803] name=Tom
2012-12-08 22:31:22.731 DemoVideo[464:1b803] email=Tom@yahoo.cn
2012-12-08 22:31:22.731 DemoVideo[464:1b803] =====================

被折叠的 条评论
为什么被折叠?



