【问题标题】:Difference between deep copy and shallow copy [duplicate]深拷贝和浅拷贝的区别[重复]
【发布时间】:2016-05-07 15:06:33
【问题描述】:

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

【问题讨论】:

标签: ios objective-c


【解决方案1】:

所以例子我们有类

@interface myClass : NSObject

@property (strong, nonatomic) NSObject *reference;

@end

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

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

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

所以一起 - 只复制引用而不是它们指向的内存(两个引用都是一样的)

深拷贝以其他方式表现 - 如果您正在复制对象,它将复制引用,并且每个复制的引用都将指向它自己复制的内存对象。这意味着更改一个对象不会导致更改另一个对象,因为它们是通过引用复制的(不像以前的那样)并且在内存中被短暂地单独分配。

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

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

浅拷贝

深拷贝

【讨论】:

  • 感谢您的解释。
猜你喜欢
  • 1970-01-01
  • 2010-09-16
  • 2011-02-09
  • 2012-04-12
  • 1970-01-01
  • 2015-01-13
  • 1970-01-01
  • 2011-03-24
  • 2017-10-14
相关资源
最近更新 更多