IOS开发中深拷贝与浅拷贝

Posted jiwangbujiu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IOS开发中深拷贝与浅拷贝相关的知识,希望对你有一定的参考价值。

简而言之:

1、对不可变的非集合对象,copy是指针拷贝,mutablecopy是内容拷贝

2、对于可变的非集合对象,copy,mutablecopy都是内容拷贝

3、对不可变的数组、字典、集合等集合类对象,copy是指针拷贝,mutablecopy是内容拷贝

4、对于可变的数组、字典、集合等集合类对象,copy,mutablecopy都是内容拷贝

但是,对于集合对象的内容复制仅仅是对对象本身,但是对象的里面的元素还是指针复制。要想复制整个集合对象,就要用集合深复制的方法,有两种:

(1)使用initWithArray:copyItems:方法,将第二个参数设置为YES即可

NSDictionary shallowCopyDict = [[NSDictionary alloc] initWithDictionary:someDictionary copyItems:YES];

 

(2)将集合对象进行归档(archive)然后解归档(unarchive):

NSArray *trueDeepCopyArray = [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:oldArray]];

 

以上是关于IOS开发中深拷贝与浅拷贝的主要内容,如果未能解决你的问题,请参考以下文章

关于Python中深拷贝与浅拷贝的理解---概念

Python中深拷贝与浅拷贝区别

C++中深拷贝与浅拷贝

python中深复制与浅复制

ES6深拷贝与浅拷贝

iOS开发——深拷贝与浅拷贝详解