对象的拷贝

首先来介绍一下对象的拷贝的概念吧:

什么要由对象的拷贝这么一个概念呢?看一个场景:假如现在一个对象中又一个数组对象,现在我们生成一个对象,同时将这个对象赋值给另外一个对象,那么现在

问题是这两个对象中的数组对象是同一个,那么如果一个对象中去修改这个数值中的内容,另外一个对象中的数组内容也会被修改,相当于这个数组对象是共享的,

当然我们有时候是不希望这种形式的出现的,这时候我们就出现了对象的拷贝。

深拷贝和浅拷贝

在拷贝对象中也是有深拷贝和浅拷贝之分的

浅拷贝:只拷贝所有属性对象的指针

深拷贝:拷贝属性对象的内容


.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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一 :拷贝的相关概念 copy语法的目的:改变副本的时候,不会影响到源对象; 深拷贝:内容拷贝,会产生新的对象。新...
    Cheriez阅读 443评论 0 1
  • //联系人:石虎QQ: 1224614774昵称:嗡嘛呢叭咪哄 一、浅拷贝 首先创建Person.h和Person...
    石虎132阅读 614评论 0 5
  • 在JS中,有六种数据类型,分别是数值(Number)、字符串(String)、布尔型(Boolean)、undef...
    大春春阅读 1,038评论 0 3
  • 拷贝也即是复制。那么深拷贝和浅拷贝呢? 在JavaScript这门语言中,数据类型分为两大类:基本数据类型和复杂数...
    avery1阅读 341评论 0 0
  • 对象的拷贝 深度拷贝一个对象 java.lang.Object 根类已经定义了 clone() 方法。子类只需要事...
    WooiiiWooiii阅读 2,408评论 0 0