Difference between deep copy and shallow copy
本问题已经有最佳答案,请猛点这里访问。
我无法理解深拷贝和浅拷贝之间的区别。请用这个简单的例子让我明白。谢谢
比如我们有课
1 2 3 4 5 | @interface myClass : NSObject @property (strong, nonatomic) NSObject *reference; @end |
让我们先看一下浅拷贝(iOS中使用的标准)
1 2 | myClass *instance = [myClass new]; myClass *copy = [instance copy]; |
"copy"变量将复制引用"reference",但来自两个变量("copy"和"instance")的两个引用都将指向一个(相同)内存对象-这意味着在一个实例中更改"reference"将导致另一个实例中的更改(对这两个实例相同),但如果我们重新分配(
所以所有这些都在一起——只复制引用,而不复制它们所指向的内存(两个引用的内存相同)
深度复制以另一种方式工作-如果您正在复制对象,它将复制引用,并且每个复制的引用都将指向自己复制的内存对象。这意味着更改一个对象不会导致更改另一个对象,因为它们是用引用(与前一个对象不同)复制的,并且在内存中被简单地单独分配。
所以所有的复制对象都会导致复制引用和它们指向的对象。这就是为什么它是深度复制-它复制所有的,而不仅仅是参考文献。
上面我添加了一些浅拷贝和深拷贝的图像,以便更好地理解。一是浅,二是深。
浅拷贝
深拷贝