举个例子可能更好理解点
NSString *pt = [[NSString alloc] initWithString:@"abc"];
上面一段代码会执行以下两个动作
1 在堆上分配一段内存用来存储@"abc" 比如:内存地址为:0X1111 内容为 "abc"
2 在栈上分配一段内存用来存储pt 比如:地址为:0Xaaaa 内容自然为0X1111
下面分别看下assign retain copy
assign的情况:NSString *newPt = [pt assing];
此时newPt和pt完全相同 地址都是0Xaaaa 内容为0X1111 即newPt只是pt的别名,对任何一个操作就等于对另一个操作。 因此retainCount不需要增加。
retain的情况:NSString *newPt = [pt retain];
此时newPt的地址不再为0Xaaaa,可能为0Xaabb 但是内容依然为0X1111。 因此newPt 和 pt 都可以管理"abc"所在的内存。因此 retainCount需要增加1
copy的情况:NSString *newPt = [pt copy];
此时会在堆上重新开辟一段内存存放@"abc" 比如0X1122 内容为@"abc 同时会在栈上为newPt分配空间 比如地址:0Xaacc 内容为0X1122 因此retainCount增加1供newPt来管理0X1122这段内存
分享到:
相关推荐
@property中的retain,copy,assign区别
### retain、copy与assign的区别详解 #### 一、前言 在Objective-C中,了解`retain`、`copy`和`assign`这三个属性对于管理内存至关重要。这些属性主要用于定义对象属性时,它们决定了如何处理对象的引用。本文将...
在iOS开发中,Objective-C语言提供了@property关键字来声明属性,并且可以在属性声明时指定不同的内存管理行为,主要涉及到assign、retain和copy这三个关键字。为了深入理解这三者的区别,首先需要了解Objective-C的...
IOS中(assign,retain,copy,weak,strong)的区别以及nonatomic的含义 我们在声明@property 属性时,总是要在括号中写上assign、retain、copy、weak、strong中的一个,很多时候,我们仅仅只是按照习惯去写经常写...
### iOS开发中retain与assign的区别 在iOS开发中,Objective-C是主要使用的语言之一,而Objective-C中的属性声明是理解对象交互方式的关键。本文将详细解释`retain`和`assign`的区别,以及其他相关的属性修饰符如`...
本篇文章详细介绍了iOS开发中的一些常见属性设置,包括readwrite、readonly、retain、copy、assign以及nonatomic。 1. 可读性: - `readwrite`:这是变量的默认属性,如果没有明确指定其他属性,变量就会具有读写...
2. **setter语意(assign/retain/copy)**: - `assign`:通常用于基本数据类型,如int、float等。setter方法直接赋值,不执行retain操作。在垃圾收集环境中,如果属性是可拷贝的NSCopying协议对象,使用assign时...
3. 请问 property 的 作用,assign,copy,retain 的 区别; assign就是基本赋值 copy是重新创建一个oc对象,计数器是1 retain是对计数器+1 4.请写出实现多线程操作涉及的类及 简单 示例; NSThread, ...
在OC中,我们可以为属性指定不同的属性修饰符,如`retain`、`copy`、`assign`等,以及`readwrite`、`readonly`和`atomic`、`nonatomic`。下面将详细介绍这些修饰符的意义和用法。 ### `assign` `assign`是最简单的...
iOS 中的属性可以分为六种:readwrite、readonly、assign、retain、copy、nonatomic。每种属性都有其特定的作用和使用场景: * readwrite:同时生成 get 方法和 set 方法的声明和实现。 * readonly:只生成 get ...
- **assign**: 直接将传入值赋给实例变量,适用于基本数据类型或不可变对象。 - **retain**: 当传入值时,对象引用计数增加1。适用于对象类型。 - **copy**: 创建传入值的一个副本,适用于字符串等对象。 - **...
retain,strong, copy,weak,assign,readonly, readwrite, unsafe_unretained 下面来分别讲讲各自的作用和区别: retain,计数器加1, (增加一个指向内存的指针) 对应release(计数器-1) setter 方法对参数进行 ...
copy 修饰符和 retain 修饰符的主要区别在于,copy 修饰符创建一个新的对象,而 retain 修饰符只是增加对象的引用计数。 6. assign 与 retain 修饰符的区别 assign 修饰符和 retain 修饰符的主要区别在于,assign ...
6. @property的内存管理关键字:在Objective-C中,@property声明属性时可以指定内存管理的关键字,比如assign、retain和copy。retain表示通过retain增加对象的引用计数,assign表示简单的赋值,不增加引用计数,copy...
Objective-C提供了几种关键字来帮助开发者管理对象的生命周期:`strong`、`weak`、`copy`、`retain`、`assign`等。例如: - `strong`: 对象被强引用,对象生命周期由引用者决定。 - `weak`: 弱引用,当没有强引用时...
在AutoRelease池中,retain、copy、assign、set的区别? - **retain**:增加对象的引用计数。 - **copy**:创建一个新对象,通常是不可变对象的深拷贝。 - **assign**:直接赋值,通常用于基本数据类型。 - **set*...
5. **`copy`、`assign`和`retain`的使用场景**: - `copy`:适用于实现了`NSCopying`协议的对象类型,例如`NSString`。这种情况下,`copy`会创建一个新的对象副本,而非简单的引用。 - `assign`:适用于基本数据...
- `retain/strong` 增加对象引用计数,对象被释放时减少。 - `assign` 不改变引用计数,可能导致悬垂指针和内存问题。 - `weak` 在对象释放后自动设为`nil`,避免循环引用。 - `copy` 分为浅拷贝和深拷贝,浅...