举个例子:
NSString *str = [[NSString alloc] initWithString:@'abc'];
上面一段代码会执行以下两个动作:
1 在堆上分配一段内存用来存储@'abc' ,比如:内存地址为0X1111 内容为 'abc'
2 在栈上分配一段内存用来存储str,比如:地址为0XAAAA 内容自然为0X1111
下面分别看下(assign,retain,copy):
1.assign的情况:NSString *newStr = [str assign];
此时newStr和str完全相同,地址都是0XAAAA ,内容为0X1111 ,即newStr只是str的别名,对任何一个操作就等于对另一个操作。因此retainCount不需要增加.
2.retain的情况:NSString * newStr = [str retain];
此时newStr的地址不再为0XAAAA,可能为0XAABB,但是内容依然为0X1111.因此newStr和str都可以管理'abc'所在的内存。因此 retainCount需要增加1.
3.copy的情况:NSString * newStr = [str copy];
此时会在堆上重新开辟一段内存存放@'abc',比如0X1122,内容为@'abc,同时会在栈上为newStr分配空间,比如地址:0XAACC,内容为0X1122,因此retainCount增加1供newStr来管理0X1122这段内存.
分享到:
相关推荐
### retain、copy与assign的区别详解 #### 一、前言 在Objective-C中,了解`retain`、`copy`和`assign`这三个属性对于管理内存至关重要。这些属性主要用于定义对象属性时,它们决定了如何处理对象的引用。本文将...
在iOS开发中,Objective-C语言提供了@property关键字来声明属性,并且可以在属性声明时指定不同的内存管理行为,主要涉及到assign、retain和copy这三个关键字。为了深入理解这三者的区别,首先需要了解Objective-C的...
@property中的retain,copy,assign区别
### iOS开发中retain与assign的区别 在iOS开发中,Objective-C是主要使用的语言之一,而Objective-C中的属性声明是理解对象交互方式的关键。本文将详细解释`retain`和`assign`的区别,以及其他相关的属性修饰符如`...
IOS中(assign,retain,copy,weak,strong)的区别以及nonatomic的含义 我们在声明@property 属性时,总是要在括号中写上assign、retain、copy、weak、strong中的一个,很多时候,我们仅仅只是按照习惯去写经常写...
本篇文章将详细解释`readwrite`、`readonly`、`retain`、`copy`、`assign`和`nonatomic`这六个属性设置的含义和使用场景。 1. **可读性**: - `readwrite`:表示属性具有读写权限,即同时拥有getter和setter方法。...
3. 请问 property 的 作用,assign,copy,retain 的 区别; assign就是基本赋值 copy是重新创建一个oc对象,计数器是1 retain是对计数器+1 4.请写出实现多线程操作涉及的类及 简单 示例; NSThread, ...
2. **setter语意(assign/retain/copy)**: - `assign`:通常用于基本数据类型,如int、float等。setter方法直接赋值,不执行retain操作。在垃圾收集环境中,如果属性是可拷贝的NSCopying协议对象,使用assign时...
iOS 中的属性可以分为六种:readwrite、readonly、assign、retain、copy、nonatomic。每种属性都有其特定的作用和使用场景: * readwrite:同时生成 get 方法和 set 方法的声明和实现。 * readonly:只生成 get ...
在OC中,我们可以为属性指定不同的属性修饰符,如`retain`、`copy`、`assign`等,以及`readwrite`、`readonly`和`atomic`、`nonatomic`。下面将详细介绍这些修饰符的意义和用法。 ### `assign` `assign`是最简单的...
copy 修饰符和 retain 修饰符的主要区别在于,copy 修饰符创建一个新的对象,而 retain 修饰符只是增加对象的引用计数。 6. assign 与 retain 修饰符的区别 assign 修饰符和 retain 修饰符的主要区别在于,assign ...
retain,strong, copy,weak,assign,readonly, readwrite, unsafe_unretained 下面来分别讲讲各自的作用和区别: retain,计数器加1, (增加一个指向内存的指针) 对应release(计数器-1) setter 方法对参数进行 ...
retain区别 HTTP的数据传输 动态绑定 subclass category protocol extension 区别 单例的实现 performSelector:withObject:方法的作用是什么? 解释一下多态 如何实现深拷贝 http和socket通信的区别,tcp和udp的区别...
10. 属性定义时使用assign、retain、copy、nonatomic的场景: - assign通常用于基本数据类型或在委托设计模式中,防止循环引用。 - retain用于增加对象的所有权,引用计数加1。 - copy在复制对象时使用,字符串或...
6. @property的内存管理关键字:在Objective-C中,@property声明属性时可以指定内存管理的关键字,比如assign、retain和copy。retain表示通过retain增加对象的引用计数,assign表示简单的赋值,不增加引用计数,copy...
在AutoRelease池中,retain、copy、assign、set的区别? - **retain**:增加对象的引用计数。 - **copy**:创建一个新对象,通常是不可变对象的深拷贝。 - **assign**:直接赋值,通常用于基本数据类型。 - **set*...
1. **assign, retain, copy, unsafe_unretained** - 这些属性在 Objective-C 中用于描述对象成员变量的内存管理行为。 2. **nonatomic** - 描述一个属性是否是原子的,即非线程安全的。 #### 引用计数 1. **...