深拷贝和浅拷贝

来源:互联网 发布:vue.js设置button隐藏 编辑:程序博客网 时间:2024/06/06 07:28


          大体来说,拷贝一个对象,实际上就是创建一个新的对象,然后用原始对象的值对其进行初始化。

       拷贝一些无指针的变量,诸如布尔型、整形、浮点型等,肯定会是直接划等号,但是要拷贝指针变量,就会有两种方式了:

       其一是浅拷贝,也就是拷贝指针的值,它和原始对象是指向同一块内存的,也就是说它们是共享这一块数据的;

       其二就是深拷贝,它是将原始对象所指的数据复制一遍,并分配给拷贝的实例变量。


实现实例变量的set方法应该反映出所使用的拷贝方式。

如果使用的是深拷贝,那么代码如下:

-(void)setMyVariable:(id) newValue{       [myVariable autorelease];        myVariable = [newValue copy];}

如果要反映出是浅拷贝,那么就应该这样写:

-(void)setMyVariable:(id)newValue{       [myVariable aurorealease];        myVariable = [newVariable retain];}

当然,如果只是assign,实际上也应该将其理解为是一种浅拷贝,示例代码如下:

-(void) setDelegate:(id) newDelegate{       delegate = newDelegate;}


原创粉丝点击