深浅复制的的理解与区别

1.浅复制,仅仅是复制对象本身,并没有对所含的的对象进行复制,仅仅是对所含的对象进行Retain一下,引用计数加1

2.深复制,不仅仅对对对象本身进行复制,还对所含的对象进行复制,拷贝出一个副本。

NSMutableArray *array = [NSMutableArray arrayWithCapacity:2];

for (int i=0; i<2; i++) {

[array addObject:(以一个类为对象)类名 P];

}

[array copy];//则类对象不会被复制,仅仅是引用计数加1

一般的:Foundation 的都是浅复制

当对象是不可变(NSArray,NSString,NSDictionary)中的Foundation 中不可变的可复制对象

copy + 不可变源对象   = retain 其他的都相当与 copy

时间: 2024-10-05 22:29:39

深浅复制的的理解与区别的相关文章

深浅复制

读前小提示:对于深浅复制有一个清楚的了解,对于学习oc的朋友来说,至关重要.那么首先,我们要明白深浅复制是如何定义的呢.这里为了便于朋友们理解,定义如下. 浅 复 制:在复制操作时,对于被复制的对象的每一层复制都是指针复制. 深 复 制:在复制操作时,对于被复制的对象至少有一层复制是对象复制. 完全复制:在复制操作时,对于被复制的对象的每一层复制都是对象复制. 注:1.在复制操作时,对于对象有n层是对象复制,我们可称作n级深复制,此处n应大于等于1. 2.对于完全复制如何实现(目前通用的办法是:

详谈OC(object-c)深浅复制/拷贝-什么情况下用retain和copy

读前小提示:对于深浅复制有一个清楚的了解,对于学习oc的朋友来说,至关重要.那么首先,我们要明白深浅复制是如何定义的呢.这里为了便于朋友们理解,定义如下. 浅 复 制:在复制操作时,对于被复制的对象的每一层复制都是指针复制. 深 复 制:在复制操作时,对于被复制的对象至少有一层复制是对象复制. 完全复制:在复制操作时,对于被复制的对象的每一层复制都是对象复制. 注:1.在复制操作时,对于对象有n层是对象复制,我们可称作n级深复制,此处n应大于等于1. 2.对于完全复制如何实现(目前通用的办法是:

python 深浅复制与指针内存

Python是一门很好的语言,他的优点在于拥有巨大灵活性的同时也拥有无比的严谨性,其他语言规定了很多语法,告诉你什么情况下,语法就是这样的,而Python却用很少的规定,延伸出很多语法,有些语法看上去很奇怪,仔细分析却是那么的合理.今天思考了Python中关于指针和深浅复制的问题,下面希望能通过根据内存空间的变化对这些让人头疼的问题作出一个解释. 首先看第一个例子: a = 1 b = a b = 2 print 'a = %s' %a, 'b = %s'%b 结果:a = 1 b = 2 当执

Python格式化输出和深浅复制

字符串的四种拼接方法,常用格式化 deepcopy(深复制) bytes 和 bytearray 的基本用法 字符串拼接 使用 + 格式化字符串 使用join 用单引号内的字符来拼接,参数填一个整体 使用format ,占位符:{} 字符串格式化输出 % 规定了对应位置的值只能填对应的类型 %s    %字符串 %d    %数字(十进制) %f    %浮点数 %s 与 %r 的区别,一个输出带引号,一个输出不带引号 其它了解即可 %c    %ASCII字符 %o    转换成8进制 %x 

OC-深浅复制

[OC学习-26]对象的浅拷贝和深拷贝——关键在于属性是否可被拷贝 对象的拷贝分为浅拷贝和深拷贝, 浅拷贝就是只拷贝对象,但是属性不拷贝,拷贝出来的对象和原来的对象共用属性,即指向同一个属性地址. 深拷贝则相当于不仅拷贝了一个对象还拷贝了它的属性,即完全是两个东西,只不过内容相同而已. 拷贝用到协议,如果这个类创建对象后,这个对象要被拷贝,那么这个类就需要用到拷贝协议,分两种:<NSCopying>和<NSMutableCopying>相当于一个是拷贝,另一个是拷贝后可修改. (1

Python基础(五):列表的深浅复制

首先我们需要明确列表的深浅复制是针对被嵌套的列表而言的,也就是说只有对嵌套列表我们才需要考虑这个问题.来看例子. list1=['老大','老二',['老三','老四','老五'],'老六','老七'] list2=list1.copy() print(list1,'\n',list2) #打印两个列表 print(id(list1),'\n',id(list2)) #打印两个列表的地址 print(id(list1[2]),'\n',id(list2[2])) #打印两个嵌套列表的地址 运行结

5——深浅复制、bytes和bytearray、linux用户

深浅复制 深浅复制只有在列表嵌套列表的情况下讨论 如果想保留修改之前的数据,就可以使用列表的复制,但要注意列表嵌套情况下的问题 l1 = [1,[2, 3]] l2 = l1.copy() #copy 浅复制 随着l1或l2的改变而发生改变 #浅复制只能改变第一层列表的数据,不能改变列表中嵌套的数据 ? import copy l3 = copy.deepcopy(l1) #深复制 能改变列表中所有嵌套的数据  bytes二进制序列类型 01 指定长度的零填充字节对象: [in] bytes(3

include 和 require 的理解与区别

文件的包含:Include / include_onceRequire /require_onceInclude 和require都是把一个页面引入到当前页面.俩个都是文件的引入,那怎么来理解"引入"呢? Include与require的理解 俩个都是把被包含文件的所有代码引入,替换include/require那一句.和直接把代码写在include那一句是一样的.Require作用也是把一个文件引入到当前文件.理解与include一样. Include与require的区别 答:in

inux内存映射和共享内存理解和区别

可以看到内存映射中需要的一个参数是int fd(文件的标识符),可见函数是通过fd将文件内容映射到一个内存空间, 我需要创建另一个映射来得到文件内容并统计或修改,这时我创建这另一个映射用的仍是mmap函数, 它仍需要用到fd这个文件标识,那我不等于又重新打开文件读取文件里的数据 1.既然这样那同对文件的直接操作有什么区别呢? 2.映射到内存后通过映射的指针addr来修改内容的话是修改共享内存里的内容还是文件的内容呢? 3.解决上面2个问题,我还是想确切知道共享内存有什么用??? 一种回答|: 1