【发布时间】:2016-05-07 15:06:33
【问题描述】:
我无法理解深拷贝和浅拷贝之间的区别。请用简单的例子让我理解。 谢谢
【问题讨论】:
-
浅拷贝也称为地址拷贝。在这个过程中,你只复制地址而不是实际数据,而在深拷贝中复制数据。
标签: ios objective-c
我无法理解深拷贝和浅拷贝之间的区别。请用简单的例子让我理解。 谢谢
【问题讨论】:
标签: ios objective-c
所以例子我们有类
@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]),它将只为“复制”变量重新分配,而对于“实例”,它将是前一个。
所以一起 - 只复制引用而不是它们指向的内存(两个引用都是一样的)
深拷贝以其他方式表现 - 如果您正在复制对象,它将复制引用,并且每个复制的引用都将指向它自己复制的内存对象。这意味着更改一个对象不会导致更改另一个对象,因为它们是通过引用复制的(不像以前的那样)并且在内存中被短暂地单独分配。
所以所有在一起 - 复制对象将导致复制引用和它们指向的对象。这就是为什么它是深层复制 - 它复制所有而不是仅引用。
为了更好地理解,我在上面添加了浅拷贝和深拷贝的图像。一是浅,二是深。
【讨论】: