关于ios:深拷贝和浅拷贝之间的区别

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"将导致另一个实例中的更改(对这两个实例相同),但如果我们重新分配(copy.reference = [NSObject new],它将只重新分配给"copy"变量。例如,它将是前一个。

所以所有这些都在一起——只复制引用,而不复制它们所指向的内存(两个引用的内存相同)

深度复制以另一种方式工作-如果您正在复制对象,它将复制引用,并且每个复制的引用都将指向自己复制的内存对象。这意味着更改一个对象不会导致更改另一个对象,因为它们是用引用(与前一个对象不同)复制的,并且在内存中被简单地单独分配。

所以所有的复制对象都会导致复制引用和它们指向的对象。这就是为什么它是深度复制-它复制所有的,而不仅仅是参考文献。

上面我添加了一些浅拷贝和深拷贝的图像,以便更好地理解。一是浅,二是深。

浅拷贝Shallow copy

深拷贝Deep copy