深拷贝和浅拷贝之间的区别

时间:2016-01-29 18:56:06

标签: ios objective-c

我无法理解深拷贝和浅拷贝之间的区别。请用简单的例子让我理解。 感谢

1 个答案:

答案 0 :(得分:4)

所以我们有类

@interface myClass : NSObject

@property (strong, nonatomic) NSObject *reference;

@end

让我们首先看一下浅拷贝(iOS中使用的标准)

myClass *instance = [myClass new];
myClass *copy = [instance copy];

“copy”变量将复制引用“引用”,但两个变量(“copy”和“instance”)的引用都将指向一个(相同的)内存对象 - 这意味着在一个实例中更改“引用”将导致另一个变化(两者都相同),但如果我们将重新分配(copy.reference = [NSObject new]),它将仅为“复制”变量重新分配,而对于“实例”,它将是前一个变量。

所以一起 - 只复制引用但不复制它们指向的内存(对于两个引用都是相同的)

深度复制以其他方式运行 - 如果要复制对象,它将复制引用,每个复制的引用将指向其自己复制的内存对象。这意味着更改一个对象不会导致更改另一个对象,因为它们与引用一起复制(不像之前的那个),并且会在内存中单独分配。

所以一起 - 复制对象将导致复制引用和它们指向的对象。这就是为什么它是深拷贝 - 它复制所有而不仅仅是参考。

上面我添加了浅层和深层副本的图像,以便更好地理解。第一是浅,第二是深。

浅拷贝 Shallow copy

深层复制 Deep copy