我无法理解深拷贝和浅拷贝之间的区别。请用简单的例子让我理解。 感谢
答案 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]
),它将仅为“复制”变量重新分配,而对于“实例”,它将是前一个变量。
所以一起 - 只复制引用但不复制它们指向的内存(对于两个引用都是相同的)
深度复制以其他方式运行 - 如果要复制对象,它将复制引用,每个复制的引用将指向其自己复制的内存对象。这意味着更改一个对象不会导致更改另一个对象,因为它们与引用一起复制(不像之前的那个),并且会在内存中单独分配。
所以一起 - 复制对象将导致复制引用和它们指向的对象。这就是为什么它是深拷贝 - 它复制所有而不仅仅是参考。
上面我添加了浅层和深层副本的图像,以便更好地理解。第一是浅,第二是深。