来源:http://blog.csdn.net/pjk1129/article/details/6457048
深拷贝和浅拷贝
在iphone程序中,属性合成中的retain/copy/assign有什么区别?
1)assign就不用说了,因为基本上是为简单数据类型准备的,原子类类型,例如CGPoint、CGFloat等,而不是NS对象们;
2)retain VS copy
-
copy: 建立一个索引计数为1的对象,然后释放旧对象
-
retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1
Copy其实是建立了一个相同的对象,而retain不是:
比如一个NSString对象,地址为0×1111,内容为@”STR”
Copy到另外一个NSString之后,地址为0×2222,内容相同,新的对象retain为1,旧有对象没有变化
retain到另外一个NSString之后,地址相同(建立一个指针,指针拷贝),内容当然相同,这个对象的retain值+1
也就是说,retain是指针拷贝,copy是内容拷贝。
Objective-C中的copy和c++的一样分深拷贝和浅拷贝,怎样区分这两个对象呢?我的理解是:
(1)深拷贝,就是新拷贝一块内存交给对象使用。
(2)浅拷贝,就是觉得拷贝内存太浪费,直接给你我的地址吧,相当于retain。
3)怎么区分这两种对象呢?
在Objective-C里面只有一种情况是浅拷贝,那就是不可变对象的copy,其它的都是深拷贝(包括不可变对象mutableCopy、可变对象的的copy和mutableCopy)。
分享到:
相关推荐
深拷贝和浅拷贝一些例子
接下来,我们详细探讨浅拷贝和深拷贝的区别、问题所在以及如何解决。 首先,浅拷贝是指在对象复制过程中,只是简单地复制了对象的指针,而没有复制指针所指向的数据。在浅拷贝的情况下,多个对象可能会指向同一块...
对于不可变类型(如整数、字符串、元组),浅拷贝和深拷贝没有实质区别,因为这些类型不可变,所以拷贝后的新对象和原对象是等价的,但不一定是同一对象(即`is`操作符可能返回`False`)。 总之,深拷贝和浅拷贝的...
在编程领域,尤其是在使用像JavaScript、Python这样的动态类型语言时,深拷贝和浅拷贝是两个非常重要的概念。它们涉及到对象复制的过程,对于理解和解决内存管理、数据修改等问题至关重要。下面将详细解释这两个概念...
JavaScript中的深拷贝和浅拷贝是编程面试中常见的概念,尤其在处理对象和数组时至关重要。它们主要涉及的是变量赋值时数据的复制方式。简单来说,浅拷贝是创建了一个新对象,但它的属性仍然是对原对象属性的引用,而...
【ASP.NET编程知识】浅谈.NET平台下深拷贝和浅拷贝 在.NET平台下,对象拷贝是一个常见的操作,主要分为两种类型:浅拷贝(Shallow Copy)和深拷贝(Deep Copy)。这两种拷贝方式在处理对象复制时有着显著的区别,对...
当我们谈论深拷贝和浅拷贝时,这是针对对象复制而言的。浅拷贝仅仅复制对象的引用,而深拷贝则是创建一个全新的对象,包含所有原始对象的属性值,并且如果属性是复杂类型(即引用类型),也会递归地复制其内部属性。...
在给出的例子中,我们有两个测试类`Test2`和`Test3`,分别演示了浅拷贝和深拷贝的效果。 - 在`Test2`中,通过简单赋值创建了一个新的`Test`对象`t2`,这是浅拷贝。当修改`t2`的属性时,`t1`的属性也会随之改变,...
在Python编程语言中,"copy"模块提供了对对象复制的...了解深拷贝和浅拷贝的概念后,开发者可以根据具体需求选择合适的方法。在实际编程中,结合使用`copy`模块和`deepcopy`函数,可以更有效地管理内存和数据的独立性。
前端面试相关-深拷贝和浅拷贝的实现方法和区别
js中的浅拷贝和深拷贝,只是针对复杂数据类型(Objcet,Array)的复制问题。简单来讲浅拷贝和深拷贝都可以实现在原有对象的基础上再生成一份的作用。但是根据新生成的对象能否影响到原对象可以分为浅拷贝和深拷贝。 ...
1、只有NS类型调用copy方法才是浅拷贝,其他的情况全是深拷贝 2、容器类调用copy或mutableCopy能出现的深拷贝的情况下,只是容器的深拷贝,而非容器内元素的深拷贝 3、无论是声明NSString还是NSMutableString类型的...
在iOS开发中,深拷贝和浅拷贝是两个关键概念,它们涉及到对象复制时内存管理的细节。本文将从源码角度深入解析这两种拷贝方式。 首先,我们需要明确深拷贝和浅拷贝的基本定义。浅拷贝,也称为指针拷贝,意味着拷贝...
当我们复制一个对象时,有两种主要的方法:浅拷贝和深拷贝。 2. **浅拷贝(浅复制)** 浅拷贝是指创建一个新对象,然后将原对象的引用字段的值复制到新对象中。这意味着新旧两个对象指向相同的内存区域。如果原...
然而,复制行为可以根据对象内部属性的引用方式被区分为深拷贝和浅拷贝。理解这两者之间的区别对于编写正确和高效的代码至关重要。本文将详细探讨JavaScript中的深拷贝和浅拷贝,包括它们的定义、实现方法以及在不同...
Java Clone 深拷贝与浅拷贝的两种实现方法 Java Clone 是 Java 语言中的一种复制对象的机制,它可以将一个对象的所有属性和状态复制到另一个对象中,实现对象的深拷贝和浅拷贝。下面我们将讨论 Java 中的深拷贝和浅...
深拷贝和浅拷贝的选择取决于数据结构的特性以及应用场景的需求。了解深拷贝与浅拷贝的工作原理对于编写高效可靠的代码至关重要。同时,熟悉堆与栈的概念有助于更好地理解和优化程序的内存使用情况。在实际开发过程中...