`
deng131
  • 浏览: 675283 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

assign,copy,retain之间区别

阅读更多
* assign: 简单赋值,不更改索引计数(Reference Counting)。
* copy: 建立一个索引计数为1的对象,然后释放旧对象
* retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1


还可以这样理解:
* 使用assign: 对基础数据类型 (NSInteger)和C数据类型(int, float, double, char,等)
* 使用copy: 对NSString
* 使用retain: 对其他NSObject和其子类


总结:
copy是创建一个新对象,retain是创建一个指针,引用对象计数加1。
分享到:
评论
2 楼 deng131 2011-03-16  
恩  很好的理解
1 楼 tsyouaschen 2011-03-16  
assign表示直接传递引用给属性值
retain表示将某个对象引用传递给属性值时,属性值会将引用计数加一,也就是说,属性会自己额外保留一份引用.
举例子说.
NSObject a= [[NSObject alloc] init];
classb.oneProperty = a;
[a release];
如果是assign的话,a被release之后,classb的oneProperty就不能再被使用.
如果是retian的话,a被release之后,classb的oneProperty就可以继续使用.


assign主要是int,long,bool原始数据类型.你可以试一试当你用原始数据类型retain的时候,编译会报错的。

相关推荐

    ios_assign,retain和copy详解

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

    retain和copy还有assign的区别

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

    @property中的retain,copy,assign区别

    @property中的retain,copy,assign区别

    Ios retain assign区别

    ### iOS开发中retain与assign的区别 在iOS开发中,Objective-C是主要使用的语言之一,而Objective-C中的属性声明是理解对象交互方式的关键。本文将详细解释`retain`和`assign`的区别,以及其他相关的属性修饰符如`...

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

    我们在声明@property 属性时,总是要在括号中写上assign、retain、copy、weak、strong中的一个,很多时候,我们仅仅只是按照习惯去写经常写的那一个,但有时候看代码时又会发现别人用的不尽相同,那这些之间的区别是...

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

    本篇文章将详细解释`readwrite`、`readonly`、`retain`、`copy`、`assign`和`nonatomic`这六个属性设置的含义和使用场景。 1. **可读性**: - `readwrite`:表示属性具有读写权限,即同时拥有getter和setter方法。...

    leetcode题库-iOS-Interview-Questions:收集整理iOS笔试面试题

    retain区别 HTTP的数据传输 动态绑定 subclass category protocol extension 区别 单例的实现 performSelector:withObject:方法的作用是什么? 解释一下多态 如何实现深拷贝 http和socket通信的区别,tcp和udp的区别...

    iOS 面试题

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

    iOS笔试题011

    iOS 中的属性可以分为六种:readwrite、readonly、assign、retain、copy、nonatomic。每种属性都有其特定的作用和使用场景: * readwrite:同时生成 get 方法和 set 方法的声明和实现。 * readonly:只生成 get ...

    Objective-c 学习 (2).doc

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

    iOS 各种修饰符的区别汇总(推荐)

    copy 修饰符和 retain 修饰符的主要区别在于,copy 修饰符创建一个新的对象,而 retain 修饰符只是增加对象的引用计数。 6. assign 与 retain 修饰符的区别 assign 修饰符和 retain 修饰符的主要区别在于,assign ...

    OC中的@property属性问题

    在OC中,我们可以为属性指定不同的属性修饰符,如`retain`、`copy`、`assign`等,以及`readwrite`、`readonly`和`atomic`、`nonatomic`。下面将详细介绍这些修饰符的意义和用法。 ### `assign` `assign`是最简单的...

    2021iOS笔试题总结.pdf

    10. 属性定义时使用assign、retain、copy、nonatomic的场景: - assign通常用于基本数据类型或在委托设计模式中,防止循环引用。 - retain用于增加对象的所有权,引用计数加1。 - copy在复制对象时使用,字符串或...

    iOS 面试题汇总

    1. **assign, retain, copy, unsafe_unretained** - 这些属性在 Objective-C 中用于描述对象成员变量的内存管理行为。 2. **nonatomic** - 描述一个属性是否是原子的,即非线程安全的。 #### 引用计数 1. **...

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

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

    ios开发ios基础开发面试题.txt

    在AutoRelease池中,retain、copy、assign、set的区别? - **retain**:增加对象的引用计数。 - **copy**:创建一个新对象,通常是不可变对象的深拷贝。 - **assign**:直接赋值,通常用于基本数据类型。 - **set*...

    iO程序员面试经验.pdf,这是一份不错的文件

    - **nonatomic与atomic、copy、assign、retain**:nonatomic非线程安全,atomic线程安全;copy用于深拷贝,assign浅拷贝,retain增加对象引用计数。 3. **设计模式**: - **Singleton**:确保类只有一个实例,并...

    阿里p4-p6面试题.pdf

    - 文档中提到了几种属性关键字:readwrite, readonly, assign, retain, copy, nonatomic。 - readwrite和readonly用于指定属性是否可读写,readwrite可以读写,而readonly只能读。 - assign通常用于基本数据类型...

Global site tag (gtag.js) - Google Analytics