深拷贝和浅拷贝之间的区别
这个问题在这里已经有了答案:
所以例如我们有课
@interface myClass : NSObject
@property (strong, nonatomic) NSObject *reference;
@end
让我们先看一下浅拷贝(iOS中使用的标准)
myClass *instance = [myClass new];
myClass *copy = [instance copy];
“复制”变量将复制引用“引用”,但来自两个变量(“复制”和“实例”)的引用将指向一个(相同)内存对象 - 意味着在一个实例中更改“引用”将导致更改在另一个中(对于它们都是相同的),但是如果我们将重新分配( copy.reference = [NSObject new]
),它将只为“复制”变量重新分配,对于“实例”它将是前一个。
所以一起 - 只复制引用而不复制它们指向的内存(对于这两个引用它都是相同的)
以其他方式执行深层复制 - 如果您要复制对象,它将复制引用,并且每个复制的引用都将指向自己复制的内存对象。 这意味着改变一个对象不会导致改变另一个对象,因为它们被引用复制(不像前一个对象)并在内存中分别简单分配。
因此,所有这些 - 复制对象将导致复制引用和它们指向的对象。 这就是为什么它是深拷贝 - 它复制所有,而不仅仅是引用。
上面我添加了浅层和深层复制的图像以便更好地理解。 第一个是浅的,第二个是深的。
浅拷贝
深层复制
链接地址: http://www.djcxy.com/p/79351.html