深复制

Java对象复制

五迷三道 提交于 2019-12-09 09:51:08
1.Java对象复制概念 1.1 浅复制(浅克隆) 复制的对象的所有变量与含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原对象。换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。 1.2 深复制(深度克隆) 复制的对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。那些引用其他对象的变量将指向复制的新对象,而不是原来的对象。换言之,深复制把要复制的对象所引用的对象都复制了一遍。 2.Java对象的clone()克隆方法 2.1 clone方法 clone方法将对象复制了一份并返回给调用者。一般而言,clone()方法满足 对任何的对象x,都有x.clone() != x;也即克隆的对象与原对象不是同一个对象,他们有不同的内存地址 对任何的对象x,都有x.clone().getClass() == x.getClass(),也即克隆对象与原对象的类型一致。 如果对象x的equals()方法定义恰当,那么x.clone().equal(x)应该成立。 2.2 Java中对象的克隆 为了获取对象的一份拷贝,我们可以利用Object的clone()方法 在派生类中覆盖基类的clone()方法,并声明为public 在派生类的clone()方法中,调用super.clone()。 在派生类中实现Cloneable接口 2.3 示例 2.3.1

Objective-C浅拷贝和深拷贝

被刻印的时光 ゝ 提交于 2019-12-07 01:40:40
浅拷贝 浅拷贝就是对内存地址的复制,让目标对象指针和源对象指向同一片内存空间。如: char * str = ( char *) malloc ( 100 ); char * str2 = str; 浅拷贝只是对对象的简单拷贝,让几个对象共用一片内存,当内存销毁的时候,指向这片内存的几个指针需要重新定义才可以使用,要不然会成为野指针。 iOS 里面的浅拷贝: 在 iOS 里面, 使用retain 关键字进行引用计数,就是一种更加保险的浅拷贝。他既让几个指针共用同一片内存空间,又可以在release 由于计数的存在,不会轻易的销毁内存,达到更加简单使用的目的。 深拷贝: 深拷贝是指拷贝对象的具体内容,而内存地址是自主分配的,拷贝结束之后,两个对象虽然存的值是相同的,但是内存地址不一样,两个对象也互不影响,互不干涉。 copy 与 retain 的区别: copy 是创建一个新对象,retain 是创建一个指针,引用对象计数加一。 copy属性标识两个对象内容相同,新的对象retain count为1, 与旧有对象引用计数无关,旧有对象没有变化。copy减少对象对上下文的依赖。 深拷贝: iOS提供了copy和mutableCopy方法,顾名思义,copy就是复制了一个imutable的对象,而mutableCopy就是复制了一个mutable的对象。以下将举几个例子来说明。