深复制和浅复制的区别

关于深复制和浅复制的区别,总的来说就是深复制是对对象地址的拷贝,而浅复制是对指针的拷贝。还是苹果文档的解释更容易让人听明白:

在此输入图片描述

就是说浅复制(shallow copy)会产生一个新的集合,这个集合跟原始的集合共享其中对象的所有权(ownership),两个集合本身的地址不同,但其中元素的地址是相同的,元素的计数器加1了,不会开辟新的内存空间,也就是指针的拷贝。而深复制则是创建一个新的集合对象,并且把原始集合对象中的元素一个个复制到新的集合中,两个集合本身地址不同之外,其中元素的地址也不相同,就是前面说的地址拷贝。

大多数的方法都是浅复制,比如initWithArray,copy等等。深复制可以使用这个方法:

  • (instancetype)initWithArray:(NSArray *)array copyItems:(BOOL)flag; 第二个参数传YES就会返回一个深复制的实例对象。

参考:https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Collections/Articles/Copying.html

你可能感兴趣的:(深复制和浅复制的区别)