一、概念
1、copy的目的在于修改源对象或者副本的时候互不影响
2、只有在不可变对象copy的时候才是浅拷贝,其余都是深拷贝
二、自定义对象的copy(必须首先遵守NSCopying协议)
1、自定义对象copy的必要步骤
1>遵守NSCopying协议
2>重写实现copyWithZone:方法
2、ARC的copy
实现copyWithZone:(NSZone *)zone
e.g.:person对象有两个属性name和age
- (id)copyWithZone:(NSZone *)zone{
Person *person = [[self alloc] init];
person.age = self.age;
person.name = self.name;
return person;
}
3、MRC的copy
1>做完必要的遵守协议和实现copyWithZone方法
2>对OC对象属性重写其内存管理的setter方法
3>重写dealloc方法
3、zone空间介绍
1>因为copyWithZone:当中的zone就是要为对象开辟的内存空间(OC的alloc就是C语言的malloc开辟内存用的,同样需要告诉系统你要开辟空间大小)
2>NSZone空间分配出来的堆空间是相对比较连续的,可以减少内存碎片,一般程序开发没有必要关心