首先来介绍一下对象的拷贝的概念吧:
为
什么要由对象的拷贝这么一个概念呢?看一个场景:假如现在一个对象中又一个数组对象,现在我们生成一个对象,同时将这个对象赋值给另外一个对象,那么现在
问题是这两个对象中的数组对象是同一个,那么如果一个对象中去修改这个数值中的内容,另外一个对象中的数组内容也会被修改,相当于这个数组对象是共享的,
当然我们有时候是不希望这种形式的出现的,这时候我们就出现了对象的拷贝。
深拷贝和浅拷贝
在拷贝对象中也是有深拷贝和浅拷贝之分的
浅拷贝:只拷贝所有属性对象的指针
深拷贝:拷贝属性对象的内容
.h
#import
@interfacePerson : NSObject
@property(nonatomic,retain)NSMutableArray*apples;
@property(nonatomic)intage;
@end
.m
#import "Person.h"
@implementationPerson
- (id)copyWithZone:(NSZone*)zone{
//创建一个新的副本对象
//这个方法是会被继承的,所以这里还是不用
//[Person allocWithZone:<#(struct _NSZone *)#>];
Person* p = [[selfclass]allocWithZone:zone];
//p.apples = _apples;//是指针赋值,所以还是浅拷贝
//深拷贝
//拷贝之后引用计数会+1,需要release以下
p.apples= [_applesmutableCopy];
p.age= _age;
[p.applesrelease];
//但是如果我们使用->语法就不需要了,因为我们没有使用set方法,引用计数没有操作
//但是这种方式我们不采用
//p->_apples = [_apples mutableCopy];
returnp;
}
@end