深拷贝与浅拷贝

概述

浅拷贝:指针拷贝
深拷贝:内容拷贝
具体如图1所示


图1. 深拷贝与浅拷贝

本质

深拷贝和浅拷贝的本质是新的对象与原来的对象指针是否相同

开发过程中,会遇到两种类型:对象的拷贝,集合的拷贝

  • 对象的拷贝:copy为浅拷贝,mutableCopy为深拷贝
  • 集合的拷贝:copy为浅拷贝,mutableCopy也为浅拷贝,举例如下
NSArray *array = [obj1, obj2, obj3];
NSArray *arrayA = [array copy];
NSMutableArray *arrayB = [array mutableCopy];

其中arrayA 与 array指针相同,arrayB 与 array 虽然指针不同,但是 arrayB 中的obj1、obj2、obj3 等与 array 中的 obj1、obj2、obj3 指针相同,因此也算是浅拷贝,或者叫单层深拷贝

集合的深拷贝

要想实现集合的深拷贝,可以通过如下方法, initWithArray:copyItems:第二项设为YES

NSArray *shallowCopyArray = [[NSArray alloc] initWithArray:someArray copyItems:YES];

用这种方法进行深拷贝,集合里的每个对象都会收到copyWithZone:消息,如果集合中的对象遵循NSCopying协议,那么对象就会被深拷贝的新的集合中,如果对象没有遵循NSCopying协议就会报错

参考

  1. iOS 集合的深复制与浅复制

你可能感兴趣的:(深拷贝与浅拷贝)