美文网首页
深拷贝与浅拷贝

深拷贝与浅拷贝

作者: NapoleonY | 来源:发表于2018-11-12 11:02 被阅读5次

概述

浅拷贝:指针拷贝
深拷贝:内容拷贝
具体如图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 集合的深复制与浅复制

相关文章

  • JS中的深拷贝与浅拷贝

    知乎:js中的深拷贝和浅拷贝? 掘金: js 深拷贝 vs 浅拷贝 前言 首先深拷贝与浅拷贝只针对 Object,...

  • 认识js下的浅拷贝与深拷贝

    浅拷贝与深拷贝 首先深拷贝和浅拷贝只针对像 Object, Array 这样的复杂对象的。简单来说,浅拷贝只拷贝一...

  • iOS深拷贝(MutableCopy)与浅拷贝(Copy)的区别

    深拷贝和浅拷贝的概念 iOS中有深拷贝和浅拷贝的概念,那么何为深拷贝何为浅拷贝呢?浅拷贝:浅拷贝并不拷贝对象本身,...

  • Objective-C中的浅拷贝和深拷贝

    Objective-C中的浅拷贝和深拷贝IOS开发之深拷贝与浅拷贝(mutableCopy与Copy)详解iOS ...

  • 深拷贝和浅拷贝

    干货!深拷贝和浅拷贝的区别 深拷贝才是拷贝,浅拷贝就是Retain Copy与Retain的区别 Copy: 根据...

  • js浅拷贝、深拷贝

    前言 本文主要简单讲一下什么是浅拷贝、什么是深拷贝、深拷贝与浅拷贝的区别,以及怎么进行深拷贝和怎么进行浅拷贝。 一...

  • iOS 图文并茂的带你了解深拷贝与浅拷贝

    iOS 图文并茂的带你了解深拷贝与浅拷贝 iOS 图文并茂的带你了解深拷贝与浅拷贝

  • 深拷贝和浅拷贝

    1: iOS开发 深拷贝与浅拷贝 2: iOS 浅谈:深.浅拷贝与copy.strong 3: iOS开发——深...

  • [C++之旅] 15 深拷贝与浅拷贝

    [C++之旅] 15 深拷贝与浅拷贝 拷贝构造函数分为深拷贝和浅拷贝两种方式 浅拷贝只是将被拷贝的对象的成员直接赋...

  • 深拷贝VS浅拷贝

    深拷贝VS浅拷贝 本文主要对深拷贝&浅拷贝的解释及实现做一下简单记录。 之所以会有深拷贝与浅拷贝之分,是因为不同数...

网友评论

      本文标题:深拷贝与浅拷贝

      本文链接:https://www.haomeiwen.com/subject/spuqfqtx.html