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这段内存
分享到:
相关推荐
### retain、copy与assign的区别详解 #### 一、前言 在Objective-C中,了解`retain`、`copy`和`assign`这三个属性对于管理内存至关重要。这些属性主要用于定义对象属性时,它们决定了如何处理对象的引用。本文将...
@property中的retain,copy,assign区别
在iOS开发中,Objective-C语言提供了@property关键字来声明属性,并且可以在属性声明时指定不同的内存管理行为,主要涉及到assign、retain和copy这三个关键字。为了深入理解这三者的区别,首先需要了解Objective-C的...
### 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方法。...
在OC中,我们可以为属性指定不同的属性修饰符,如`retain`、`copy`、`assign`等,以及`readwrite`、`readonly`和`atomic`、`nonatomic`。下面将详细介绍这些修饰符的意义和用法。 ### `assign` `assign`是最简单的...
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时...
6. @property的内存管理关键字:在Objective-C中,@property声明属性时可以指定内存管理的关键字,比如assign、retain和copy。retain表示通过retain增加对象的引用计数,assign表示简单的赋值,不增加引用计数,copy...
iOS 中的属性可以分为六种:readwrite、readonly、assign、retain、copy、nonatomic。每种属性都有其特定的作用和使用场景: * readwrite:同时生成 get 方法和 set 方法的声明和实现。 * readonly:只生成 get ...
retain,strong, copy,weak,assign,readonly, readwrite, unsafe_unretained 下面来分别讲讲各自的作用和区别: retain,计数器加1, (增加一个指向内存的指针) 对应release(计数器-1) setter 方法对参数进行 ...
copy 修饰符和 retain 修饰符的主要区别在于,copy 修饰符创建一个新的对象,而 retain 修饰符只是增加对象的引用计数。 6. assign 与 retain 修饰符的区别 assign 修饰符和 retain 修饰符的主要区别在于,assign ...
- `OBJC_ASSOCIATION_ASSIGN`: 默认策略,不做任何保留,只做赋值操作。 - `OBJC_ASSOCIATION_RETAIN`: 关联对象遵循`retain`语义,会调用`retain`方法。 - `OBJC_ASSOCIATION_COPY`: 关联对象遵循`copy`语义,会...
在Objective-C中,存在五种关联策略:OBJC_ASSOCIATION_ASSIGN、OBJC_ASSOCIATION_RETAIN_NONATOMIC、OBJC_ASSOCIATION_COPY_NONATOMIC、OBJC_ASSOCIATION_RETAIN和OBJC_ASSOCIATION_COPY。前两个策略和后两个策略的...
#### 三、属性 `readwrite`,`readonly`,`assign`,`retain`,`copy`,`nonatomic` 各是什么作用,在那种情况下用? - **`readwrite`**: - 默认属性,表示同时生成get方法和set方法。 - 适用于需要可读写属性的...
在AutoRelease池中,retain、copy、assign、set的区别? - **retain**:增加对象的引用计数。 - **copy**:创建一个新对象,通常是不可变对象的深拷贝。 - **assign**:直接赋值,通常用于基本数据类型。 - **set*...