Objective-C之深浅拷贝
深拷贝(指针和指向都改变) , 浅拷贝(指针改变,指向不变)
NSString *s1 = @"string";
NSLog(@"s1 : %p, %p, %@", &s1, s1, [s1 className]);
id s2 = s1; // 浅拷贝
NSLog(@"s2 : %p, %p, %@", &s2, s2, [s2 className]);
id s3 = [s1 copy]; // 浅拷贝 得到不可变对象
NSLog(@"s3 : %p, %p, %@", &s3, s3, [s3 className]);
id s4 = [s1 mutableCopy]; // 深拷贝 得到可变对象
NSLog(@"s4 : %p, %p, %@", &s4, s4, [s4 className]);
/**
* s1 : 0x7ffeefbff658, 0x1000020b8, __NSCFConstantString
* s2 : 0x7ffeefbff650, 0x1000020b8, __NSCFConstantString
* s3 : 0x7ffeefbff648, 0x1000020b8, __NSCFConstantString
* s4 : 0x7ffeefbff640, 0x1030197f0, __NSCFString
*/
NSMutableString *ms1 = [NSMutableString stringWithFormat:@"%@", s1];
NSLog(@"ms1 : %p, %p, %@", &ms1, ms1, [ms1 className]);
id ms2 = ms1;// 指针指向指针 浅拷贝
NSLog(@"ms2 : %p, %p, %@", &ms2, ms2, [ms2 className]);
id ms3 = [s1 copy];// 深拷贝 得到不可变对象
NSLog(@"ms3 : %p, %p, %@", &ms3, ms3, [ms3 className]);
id ms4 = [s1 mutableCopy];// 深拷贝 得到可变对象
NSLog(@"ms4 : %p, %p, %@", &ms4, ms4, [ms4 className]);
/**
* ms1 : 0x7ffeefbff638, 0x1004297c0, __NSCFString
* ms2 : 0x7ffeefbff630, 0x1004297c0, __NSCFString
* ms3 : 0x7ffeefbff628, 0x1000020b8, __NSCFConstantString
* ms4 : 0x7ffeefbff620, 0x1006378f0, __NSCFString
*/
| 源对象类型 | 拷贝模式 | 目标对象类型 | 拷贝类型 |
|---|---|---|---|
| NSMutableString | copy | 不可变 / NSString | 深拷贝 |
| NSMutableString | mutableCopy | 可变 / NSMutableString | 深拷贝 |
| NSString | copy | 不可变 / NSString | 浅拷贝 |
| NSString | mutableCopy | 可变 / NSMutableString | 深拷贝 |
Objective-C之深浅拷贝的更多相关文章
- Python 从零学起(纯基础) 笔记 之 深浅拷贝
深浅拷贝 1. import copy#浅拷贝copy.copy()#深拷贝copy.deepcopy()#赋值 = 2. 对于数字和字符串而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个 ...
- python——赋值与深浅拷贝
初学编程的小伙伴都会对于深浅拷贝的用法有些疑问,今天我们就结合python变量存储的特性从内存的角度来谈一谈赋值和深浅拷贝~~~ 预备知识一——python的变量及其存储 在详细的了解python中赋 ...
- Python中的深浅拷贝
1.什么是深浅拷贝? python中一切皆对象,python中的数字.字符串.元组等,如果存放在了内存中,这部分内存里面的内容是不会改变的,但是也有情况,内存中存放了可变对象,比如说列表和字典,他们的 ...
- Python-Day3知识点——深浅拷贝、函数基本定义、内置函数
一.深浅拷贝 import copy #浅拷贝 n1={'k1':'wu','k2':123,'k3':['carl',852]} n2=n1 n3=copy.copy(n1) print(id(n1 ...
- python基础知识5——赋值与深浅拷贝——整数和字符串,列表元组字典
深浅copy 一.数字和字符串 对于 数字 和 字符串 而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址. 1 import copy 2 # ######### 数字.字符串 #### ...
- python 学习笔记5(深浅拷贝与集合)
拷贝 我们已经详细了解了变量赋值的过程.对于复杂的数据结构来说,赋值就等于完全共享了资源,一个值的改变会完全被另一个值共享. 然而有的时候,我们偏偏需要将一份数据的原始内容保留一份,再去处理数据,这个 ...
- Python开发【第二章】:Python深浅拷贝剖析
Python深浅拷贝剖析 Python中,对象的赋值,拷贝(深/浅拷贝)之间是有差异的,如果使用的时候不注意,就可能产生意外的结果. 下面本文就通过简单的例子介绍一下这些概念之间的差别. 一.对象赋值 ...
- python基础(三元运算+深浅拷贝+函数参数)
三元运算 三元运算,又称三目运算,主要作用是减少代码量,是对简单的条件语句的缩写. 书写格式: result = 值1 if 条件 else 值2 即如果条件成立,则将值1赋给result变量,如果不 ...
- @proprety数组字典字符串用copy和strong区别(深浅拷贝)
//// @proprety数组字典字符串用copy和strong区别(深浅拷贝).h// IOS笔记//// /* _proprety________copy_strong_________h ...
- Python全栈之路3--set集合--三元运算--深浅拷贝--初识函数
一.上节课的重点回顾: 1.类名加括号其实就是执行类的__init__方法: 2.int a.创建方式 n1 = 123 #根据int类创建了一个对象 n2 = int(123) #根据int类创建一 ...
随机推荐
- 总结:几种生成html格式测试报告的方法
写自动化测试时,一个很重要的任务就是生成漂亮的测试报告. 1.用junit或testNg时,可以用ant辅助生成html格式: <target name="report" d ...
- q1095
一,写题 1,我这个递归的错误我挺想搞出来的 int fa(int x) { ) return cnt; ==) { x=x/; cout<<"测试1:"<< ...
- django认证系统-user对象(创建,改密,认证)
User对象 User对象是认证系统的核心.它们通常表示与你的站点进行交互的用户,并用于启用限制访问.注册用户信息和关联内容给创建者等.在Django的认证框架中只存在一种类型的用户,因此诸如'sup ...
- 【BigData】Java基础_Eclipse配置自动补全new
需求描述 在使用Eclipse的时候,每次new一个对象,写起来比较麻烦,以下是配置Eclipse,然后使用快捷键补全new方法的步骤,此配置使用官方属于叫做:配置自动分配局部变量 配置步骤 打开Wi ...
- E-value identity bitscore
E-value: The E-value provides information about the likelihood that a given sequence match is purely ...
- 配置tomcat服务器内存大小中的Xms、Xmx、PermSize、MaxPermSize 详解
1.参数的含义 -vmargs -Xms256m -Xmx512m -XX:PermSize=256M -XX:MaxPermSize=512M -vmargs 说明后面是VM的参数,所以后面的其实都 ...
- windows上svn图标不显示 绿色对号
http://blog.csdn.net/fengyupeng/article/details/12514449 症状1:项目左侧导航栏表不能正常显示图标 方法:windows->prefere ...
- DB2 Error : SQLCODE=-802,SQLSTATE=22003 异常的原因
使用DB2时,报错为 DB2 Error : SQLCODE=-802,SQLSTATE=22003 主要原因: 是我们sql语句使用某个字段*86400后结果非常大,导致无法返回结果:因为某个字段* ...
- shell三剑客之sed
背景 sed(Stream Editor 流编辑器),作为三剑客的一份子,主要的功能有增删改查.为什么称之为"流"编辑器呢?大家知道:在Linux文件系统中,一切都可以作为文件来处 ...
- Android集成C程序访问驱动设备节点
1.前言 Android系统中,应用程序一般是使用Java语言进行开发的,但是通过C语言也可以进行Android中的可执行程序开发,接下来,将简单介绍在Android系统中如何通过C程序来访问内核中s ...