IOS 深复制(深拷贝)和浅复制(浅拷贝)

Objective-C学习之浅复制和深复制 对一不可变对象复制,copy是指针复制(浅拷贝)和mutableCopy就是对象复制(深拷贝)。如果是对可变对象复制,都是深拷贝,但是copy返回的对象是不可变的。浅复制只复制对象本身,对象里的属性、包含的对象不做复制深复制复制全部,包括对象的属性和其他对象Foundation框架支持复制的类,默认是浅复制在Foundation对象中:copy是一个不可变的对象时,作用相当于retain当使用mut 阅读详情
// 深浅复制1
- (IBAction)copyAction1:(id)sender {
    NSString *string0 = [NSString stringWithFormat:@"ABCDEFG"];
    NSString *string1 = [string0 copy];   // 浅复制
    NSMutableString *string2 = [string0 mutableCopy]; // 深复制
    NSLog(@"string0 = %@ 指针地址 = %p", string0, string0);
    NSLog(@"string1 = %@ 指针地址 = %p", string1, string1);
    NSLog(@"string2 = %@ 指针地址 = %p", string2, string2);
}

打印输出:

2020-04-02 22:01:55.186687+0800 深浅复制[2125:47190] string0 = ABCDEFG 指针地址 = 0xf5ab84295d5e4bfe
2020-04-02 22:01:55.186859+0800 深浅复制[2125:47190] string1 = ABCDEFG 指针地址 = 0xf5ab84295d5e4bfe
2020-04-02 22:01:55.187004+0800 深浅复制[2125:47190] string2 = ABCDEFG 指针地址 = 0x600003e45440
// 深浅复制2
- (IBAction)copyAction2:(id)sender {
    NSMutableString *string0 = [NSMutableString stringWithFormat:@"ABCDEFG"];
    NSString *string1 = [string0 copy];   // 深复制
    NSMutableString *string2 = [string0 mutableCopy]; // 深复制
    NSLog(@"string0 = %@ 指针地址 = %p", string0, string0);
    NSLog(@"string1 = %@ 指针地址 = %p", string1, string1);
    NSLog(@"string2 = %@ 指针地址 = %p", string2, string2);
}

打印输出:

2020-04-02 22:01:57.341764+0800 深浅复制[2125:47190] string0 = ABCDEFG 指针地址 = 0x600003e44900
2020-04-02 22:01:57.341978+0800 深浅复制[2125:47190] string1 = ABCDEFG 指针地址 = 0xf5ab84295d5e4bfe
2020-04-02 22:01:57.342140+0800 深浅复制[2125:47190] string2 = ABCDEFG 指针地址 = 0x600003e455c0

copy是浅复制,multableCopy是深复制?
错误!

  1. copy操作如果来源对象是否可变,如果来源对象是不可变对象,则只拷贝指针,也就是浅拷贝;
  2. copy操作如果来源对象是可变对象,则拷贝对象内容,也就是深拷贝
    本质:
    浅复制:复制对象指针地址
    深复制:复制对象内容

    关于copy和multableCopy的内容可以查看:
    https://blog.youkuaiyun.com/programmer589/article/details/105279257
浅析iOS中的浅拷贝和深拷贝(copy和mutableCopy) ios提供了copy和mutablecopy方法,顾名思义,copy就是复制了一个imutable的对象,而mutablecopy就是复制了一个mutable的对象。本文给大家介绍iOS中的浅拷贝和深拷贝(copy和mutableCopy) ,感兴趣的朋友一起看看吧 立即下载

相关推荐

uni-app项目中引入Vant UI组件库(完美避坑!!!)纯净版

uni-app项目中引入Vant UI组件库(纯净版--无uni-ui)

Wzmlzrr的博客 3万+

【iOS】深拷贝与浅拷贝

在前面学习NSString的三种实现方式的过程中,遇到了深浅拷贝的问题,特此撰写博客总结知识浅复制是指创建一个新对象,该对象与原始对象共享内部数据的引用。换句话说,浅复制只复制对象本身,而不复制对象所引用的数据。因此,原始对象和副本对象指向同一块内存,对其中一个对象的修改会影响另一个对象。通俗的讲,浅复制就是仅仅创建一个存放与复制对象相同地址的指针变量,也可以称为指针拷贝深复制是指创建一个新对象,并复制原始对象及其引用的所有数据。深复制会递归地复制对象的所有内容,包括对象所引用的其他对象。

weixin_72437555的博客 1393

一份针对零基础学习AI Agent详细学习计划

以下是针对零基础学习者制定的AI Agent详细学习计划,结合最新行业动态和实用资源推荐,帮助你从入门到进阶系统掌握核心技能

sexy19910923的博客 1903

【iOS】copy&strong原理+深浅拷贝+完全拷贝

copy&strong原理+深浅拷贝+完全拷贝

cheng_lin0201的博客 1581

基于车牌识别的停车收费系统的设计与实现(源码+开题)

本系统(程序源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景: 随着城市化进程的加速和汽车保有量的增加,停车难成为了一个普遍存在的问题。传统的停车收费方式存在着效率低下、管理混乱等问题。因此,开发一款基于车牌识别的停车收费系统具有重要的现实意义。研究意义: 基于车牌识别的停车收费系统可以有效地解决传统停车收费方式在效率和准确性方面的问题,提高停车服务的效率和质量。

迟限程序设计 1391

射频接收机本振相噪指标计算:从倒易混频到GSM实战

在射频接收机设计中,相位噪声是衡量本振信号频谱纯度、影响系统灵敏度的关键指标。其核心影响机制源于倒易混频原理:当不纯净的本振信号与强带外阻塞信号混频时,本振的噪声边带会被转换到中频通带内,从而抬升接收机噪声基底。这一过程直接决定了接收机在阻塞测试等场景下的性能极限。从技术价值看,精确计算本振相噪要求,是进行系统噪声预算、实现成本与性能权衡的核心依据。尤其在手机、基站等对灵敏度要求极高的应用中,它指导着锁相环和压控振荡器的选型与设计。本文以经典的GSM DCS1800标准为例,通过详细的公式推导与变量分析,演

weixin_30368405的博客 325

iOS 深拷贝与浅拷贝详解

浅拷贝只是对object对象指针进行拷贝,不会开辟新的内存。与数据源指向的是同一内存。例如copyA = [A copy],capyA和A指向的是同一内存,A的值变化,copyA的值也会发生变化。 copy方法做的是浅拷贝。 深拷贝 深拷贝会开辟新的内容,然后对原数据进行复制,新object对象与数据源指向的是不同的内存,对数据源操作不会影响新object对象。例如 mutableCopyA = [A mutableCopy],mutableCopyA和A指向的是两块不同的内存,A的值

weixin_44544690的博客 2822

Word公式批量转MathType终极指南:解决omml2mml.xsl缺失与格式调整难题

本文提供Word公式批量转MathType的终极解决方案,重点解决常见的omml2mml.xsl文件缺失问题,并详细讲解批量转换与格式调整技巧。通过补全文件路径、分批次转换及样式预设等方法,大幅提升学术论文公式编辑效率,适用于Office 2016及以上版本。

weixin_28419039的博客 1348

iOS中的浅拷贝与深拷贝

在iOS中分为浅拷贝和深拷贝。浅拷贝是指针复制,与源对象指向同一内存地址,源对象的引用计数器会+1。深拷贝是内容拷贝,两个对象内容相同,新的对象 retain 为 1 ,与旧有对象的引用计数无关,旧有对象没有变化。copy 会减少对象对上下文的依赖。retain 属性表示两个对象地址相同,内容也相同,这个对象的引用计数器+1。2. 什么时候是深拷贝,什么时候是浅拷贝系统的非容器类对象指的是 NSString,NSNumber 这些不能包含其他对象的对象。在非容器类对象中。

老猿的自留地 790

数仓建模—维度建模之维度表

首先要学会识别维度,维度是相对稳定的、可抽象具有共性的、固有的(天然的)描述度量或事实的上下文属性信息,失去维度信息的度量信息是没有意义的或者说是失去维度信息的事实表是没有意义的。其次要掌握维度表的设计原则和设计流程,从而更加科学的设计维度表,其实这些东西都是术,我们一直都说一句话大道至简,其实如果你掌握了精髓,抛开这些术也可以做到得心应手,这就像张无忌练太极剑一样,忘记了才能达到道的境界,也就是无我,如果做不到就记住这些原则加以应用从而达到术的境界。

2401_84052244的博客 4361

【网络安全 | 渗透工具】Githack工具安装及使用教程详析

本文仅分享Githack工具基本安装及使用相关知识不承担任何法律责任。Git是一个非常流行的开源分布式版本控制系统,它被广泛用于协同开发和代码管理。许多网站和应用程序都使用Git作为其代码管理系统,并将其部署到生产环境中以维护其代码库。然而,在配置不当的情况下,可能会导致.git文件夹被直接部署到线上环境中,这可能会导致Git泄露问题。可通过githack下载泄露的Git存储库,以获取包含未加密密码、凭据和敏感信息的站点代码库。使用githack下载Git存储库的方法有两种。本文仅分享。

等风来 3万+

iOS深拷贝和浅拷贝解析

引言 最近项目中遇到一些有关自定义对象的copy问题,今天在这里做一些记录。以便加深理解和记忆。 什么是深拷贝、浅拷贝? 深拷贝:指针赋值,且重新开辟内存,内容重新拷贝一份。 浅拷贝:指针赋值,指针指向的内容是同一个地址,内容的引用计数+1。 注意在浅拷贝的时候如果指针指向的内存区域被销毁,指向这片内存的指针都要重新定义不然会成为野指针。 1.非集合对象的copy与mutableCopy1.

scodefarmery的博客 356

【BlueDroid】蓝牙音乐协议分析之A2DP和AVRCP连接流程(超详细)

AVCTP协议描述了蓝牙设备间Audio/Video的控制信号交换的格式和机制,他是一个总体的协议,具体的控制信息由其指定的协议(AVRCP)实现,AVCTP协议本身只指定控制Command和Response的总体的格式;这个过程中对应了Event中的btavrcp_play_status_changed_callback和btavrcp_play_position_changed_callback;上述为AVCTP-Control建立L2CAP连接的Command,对应H4的Sent (0x00);

风云说通信 7313

深复制与浅复制

浅拷贝:只创建一个新的指针,指向原指针指向的内存 深拷贝:创建一个新的指针,并开辟新的内存空间,内容拷贝自原指针指向的内存,并指向它 假设我们要对一个不可变的对象进行不可变copy(原来的对象不可变,新对象也不可变)。就没必要给新对象新建一块内存,反正大家都不可以对这个对象进行改变,那都使用一个就可以。所以iOS系统规定浅拷贝引用计数器加1就行。而需要给新对象开闭内存空间的,就是深拷贝。浅拷贝即指针拷贝,可以认为是给一只狗加了一条绳子;深拷贝不但拷贝了对象的指针,还在系统中在分配了一块内存用来存放拷贝对象的

weixin_61558111的博客 3623

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

iOS中的浅复制与深复制

OC中用copy、mutableCopy时对集合对象、非集合对象的浅复制与深复制操作

Minecraft 1592

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

iOS中深拷贝和浅拷贝的3种理解和1个注意点

在ios开发中,经常涉及到深拷贝和浅拷贝的问题,针对深拷贝和浅拷贝,为了方便大家的理解,专门总结了以下3种方式(其实本质是一样的)。   一. 理解一        浅拷贝是拷贝操作后,并没有进行真正的复制,而是另一个指针也指向了同一个地址。深拷贝,拷贝操作后,是真正的复制了一份,另一个指针指向了,拷贝后的地址。如下图:A代表原有的指针,B代表拷贝的指针。(图一为浅拷贝,图二为深拷贝)。  

Kevin's zone 2904

iOS的深拷贝和浅拷贝

深拷贝和 浅拷贝的概念 首先在谈论iOS深拷贝和浅拷贝之前先给出对应概念 深拷贝 :浅拷贝并不拷贝对象本身,只是对指向对象的指针进行拷贝 浅拷贝 :直接拷贝对象到内存中一块区域,然后把新对象的指针指向这块内存 一个小小的注意事项 在iOS中并不是所有对象都支持Copy和MutableCopy,遵循NSCopying协议的类可以发送Copy协议,遵循NSMutableCopying协议的类可以发送M...

weixin_44824650的博客 274

android深浅拷贝,iOS中的深复制与浅复制

多语言中都有深复制浅复制的概念,如C++,ObjC等。简单来说,浅复制就是两个变量指向了同一块内存区域,深复制就是两个变量指向了不同的内存区域,但是两个内存区域里面的内容是一样的。浅复制示意图:深复制示意图:iOS开发中,浅复制和深复制要更复杂一些,涉及到集合对象和非集合对象的copy与mutableCopy。非集合对象:如NSString,NSInteger,NSNumber……集合对象:如NS...

weixin_42452460的博客 262

iOS 深、浅复制及完全深复制

文章目录深、浅复制差别1、非容器 + 不可变对象(NSString) + retain + copy + mutableCopy2、非容器 + 可变对象(NSMutableString) + retain + copy + mutableCopy3、容器类 + 非可变对象 + retain + copy + mutableCopy4、容器类 + 可变对象 + retain + copy + m...

weixin_43900761的博客 414

Python深复制浅复制or深拷贝浅拷贝

Python深复制浅复制or深拷贝浅拷贝简单点说1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象。2. copy.deepcopy 深拷贝 拷贝对象及其子对象用一个简单的例子说明如下:>>>import copy >>>a = [1, 2, 3, 4, ['a', 'b', 'c']] >>> b = a >>> c = copy.copy(a) >>> d = copy

tycoon的专栏 568

iOS深复制与浅复制

一、概念: 浅复制,也有人称做浅拷贝。就是只改变新对象的指针指向,并未生成新的内存地址,只是将新对象的指针指向要复制对象的内存地址。集合类与非集合类执行copy操作都是浅复制。 深复制,同样也有人称做深拷贝。即改变新对象指针指向,还为对象生成新的内存地址。深复制又分为单层深复制与完全深复制,单层深复制虽然生成了新的内存地址,但是新的对象中的元素地址还是旧对象元素的地址;完全深复制就不一样了,不...

jbr5740的专栏 290

iOS开发之深复制浅复制

iOS开发中,对象拥有复制特性,必须实现NSCopying,NSMutableCopying协议,实现该协议的copyWithZone方法和mutableCopyWithZone方法 深拷贝和浅拷贝的区别就在于copyWithZone方法的实现, 浅拷贝代码如下: ? 1 2 3 4 5 6 7 8

WJP19930121的博客 388

【iOS】浅拷贝和深拷贝

浅拷贝和深拷贝 浅拷贝即指针拷贝,可以认为是给一只狗加了一条绳子;深拷贝不但拷贝了对象的指针,还在系统中在分配了一块内存用来存放拷贝对象的内容,可以认为是产生了一条带绳子的新狗。即浅拷贝是两根绳子一条狗,深拷贝是两根绳子两条狗且每只狗对应各自的绳子。 图示: 深浅拷贝取决于拷贝后的对象是不是和被拷贝对象的地址相同,如果不同,则产生了新的对象,即为深拷贝。如果不同,则只是指针拷贝,相当于re...

浅浅的博客 350

深拷贝,浅拷贝

mv ./Images/**/**.png ./temp/ iOS 集合的深复制与浅复制 iOS 浅谈:深.浅拷贝与copy.strong 对象拷贝有两种方式:浅复制和深复制。顾名思义,浅复制,并不拷贝对象本身,仅仅是拷贝指向对象的指针;深复制是直接拷贝整个对象内存到另一块内存中。 再简单些说:浅复制就是指针拷贝;深复制就是内容拷贝。 针对 [xxx copy],...

dazhi121812的博客 97

(0056)iOS开发之深拷贝与浅拷贝

iOS开发之深拷贝与浅拷贝 打个比方,对于同一个抽屉里的蛋糕,深拷贝时制作一份新的蛋糕存起来,浅拷贝是复制一把打开抽屉钥匙存起来。 深拷贝拷贝的是内容,浅拷贝拷贝的是指针。用一句简单的话来说就是浅拷贝,是对指针的拷贝,拷贝后两个指针指向同一个内存空间,深拷贝不但对指针进行拷贝,而且对指针指向的内容进行拷贝,经深拷贝后的指针是指向两个不同地址的指针。 理解一: 浅

沐雨07的专栏 456

关于ios深浅拷贝

最近在准备面试~打算暑假的时候去面试去,去看一看公司的氛围,毕竟总是埋头苦学也不知道自己的水平咋样。去尝试下看看自己的分量。(还有上次说好了要更新上一篇提到的知识点的。。。) 这两天看了一个ios的知识点关于深浅拷贝的问题,首先推荐几篇不错的我觉得讲的超级好在这里也谢谢大佬们无私的分享,对应我这个的小白真的有很大的帮助~ 好了接下来就来讲讲我的学习理解好实验吧~ 写在前面 还有一篇...

Sharker的博客 364
上一篇: iOS OC中copy和mutableCopy的使用区别
下一篇: 多线程同步之@synchronized实战例子
数智客栈
博客等级 码龄17年 5699粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值