`

retain和copy的区别

    博客分类:
  • iOS
阅读更多

-----------------------------------------------------------------------

原来简单解释过属性定义(Property) ,并且提起了简单的retain,copy,assign的区别。那究竟是有什么区别呢?

assign就不用说了,因为基本上是为简单数据类型准备的,而不是NS对象们。

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 是内容拷贝。哇,比想象的简单多了…

------------------------------------------------------------------------------------------------------

上面这篇文章来自:http://c.gzl.name/archives/339

 

自己研究了一下,,上面文章的说法是对的,,但是遗漏了一点东西.

他说 copy是内容的拷贝  ,对于像NSString,的确是这样.

但是,如果是copy的是一个NSArray呢?比如,

 

NSArray *array = [NSArray arrayWithObjects:@"hello",@"world",@"baby"];

NSArray *array2 = [array copy];

 

这个时候,,系统的确是为array2开辟了一块内存空间,但是我们要认识到的是,array2中的每个元素,,只是copy了指向array中相对应元素的指针.这便是所谓的"浅复制".了解到这一点非常重要....

 

 

0
0
分享到:
评论

相关推荐

    @property中的retain,copy,assign区别

    @property中的retain,copy,assign区别

    retain和copy还有assign的区别

    ### retain、copy与assign的区别详解 #### 一、前言 在Objective-C中,了解`retain`、`copy`和`assign`这三个属性对于管理内存至关重要。这些属性主要用于定义对象属性时,它们决定了如何处理对象的引用。本文将...

    ios_assign,retain和copy详解

    在iOS开发中,Objective-C语言提供了@property关键字来声明属性,并且可以在属性声明时指定不同的内存管理行为,主要涉及到assign、retain和copy这三个关键字。为了深入理解这三者的区别,首先需要了解Objective-C的...

    Ios retain assign区别

    本文将详细解释`retain`和`assign`的区别,以及其他相关的属性修饰符如`readonly`、`readwrite`、`nonatomic`等,帮助读者更好地理解这些关键字的作用及其应用场景。 #### `retain`与`assign` **1. `retain`** - *...

    IOS中(assign,retain,copy,weak,strong)的区别以及nonatomic的含义

    IOS中(assign,retain,copy,weak,strong)的区别以及nonatomic的含义 我们在声明@property 属性时,总是要在括号中写上assign、retain、copy、weak、strong中的一个,很多时候,我们仅仅只是按照习惯去写经常写...

    iOS开发之详谈属性设置readwrite、readonly、retain、copy、assign、nonatomic

    6. `retain`与`copy`的区别: - `retain`实际上是保持了对象的引用,当赋值时,旧对象的引用计数减1,新对象的引用计数加1,两者指向同一个对象。 - `copy`则创建了新对象的副本,即使原来的对象是可变的(如...

    Fast copy(快速拷贝)

    1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above ...

    Fastcopy2.08(x32)

    1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above ...

    fastcopy快速拷贝工具

    Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright ...

    ios内存管理之深浅拷贝

    本文将深入探讨iOS内存管理中的一个重要概念——深浅拷贝,以及与其相关的`retain`、`copy`和`retainCount`。这些概念对于理解Objective-C中的内存管理机制至关重要。 首先,我们需要了解iOS内存管理的基本原则,即...

    iOS笔试题011

    #import 和 @class 都可以用来包含某个文件的内容,但是它们之间有一些关键的区别: * #import 能防止同一个文件被包含多次,而 @class 只是声明一个类名并不包含类的完整声明。 * #import <> 用来包含系统自带的...

    浅析iOS中的浅拷贝和深拷贝(copy和mutableCopy)

    本文将深入浅析iOS中的`copy`和`mutableCopy`方法,以及它们与`retain`操作的区别。 首先,`copy`方法用于创建一个新的不可变对象,其内容与原对象相同。这意味着如果原始对象是不可变的(如`NSString`),`copy`会...

    iOS 面试题

    3. 请问 property 的 作用,assign,copy,retain 的 区别; assign就是基本赋值 copy是重新创建一个oc对象,计数器是1 retain是对计数器+1 4.请写出实现多线程操作涉及的类及 简单 示例; NSThread, ...

    Objective-c 学习 (2).doc

    2. **setter语意(assign/retain/copy)**: - `assign`:通常用于基本数据类型,如int、float等。setter方法直接赋值,不执行retain操作。在垃圾收集环境中,如果属性是可拷贝的NSCopying协议对象,使用assign时...

    Objective-C Associated Objects 的实现原理.pdf

    OBJC_ASSOCIATION_RETAIN和OBJC_ASSOCIATION_COPY则分别保证了通过retain和copy方法对对象的持有,从而避免了野指针的问题。 关于关联对象的生命周期,objc_setAssociatedObject函数中的policy参数决定了关联对象在...

    IEEE Coptright Form

    4. 声明副本保存(Retain Copy):作者需要仔细阅读版权表格并保存副本以备将来参考。 5. 针对IEEE出版物的详细信息(IEEEPUBLICATIONTITLE):在版权表格中,需要提供完整的作者列表、作品标题以及最终发表于IEEE...

    IOS软件工程师笔试题(全选择题)【0-1年经验】.pdf

    6. @property的内存管理关键字:在Objective-C中,@property声明属性时可以指定内存管理的关键字,比如assign、retain和copy。retain表示通过retain增加对象的引用计数,assign表示简单的赋值,不增加引用计数,copy...

    OC中的@property属性问题

    正确选择`assign`、`retain`、`copy`等修饰符,可以确保代码的正确性和效率,同时`readwrite`、`readonly`和`atomic`、`nonatomic`则帮助我们控制代码的访问方式和线程安全性。在实际开发中,根据具体情况灵活运用...

Global site tag (gtag.js) - Google Analytics