`
yangping_Account
  • 浏览: 191709 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
社区版块
存档分类
最新评论

retain copy assign

 
阅读更多

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的区别

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

    @property中的retain,copy,assign区别

    @property中的retain,copy,assign区别

    ios_assign,retain和copy详解

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

    Ios retain assign区别

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

    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

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

    OC中的@property属性问题

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

    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时...

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

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

    iOS笔试题011

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

    iOS 对象属性详细介绍

    retain,strong, copy,weak,assign,readonly, readwrite, unsafe_unretained 下面来分别讲讲各自的作用和区别: retain,计数器加1, (增加一个指向内存的指针) 对应release(计数器-1) setter 方法对参数进行 ...

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

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

    实战 objc_setAssociatedObject

    - `OBJC_ASSOCIATION_ASSIGN`: 默认策略,不做任何保留,只做赋值操作。 - `OBJC_ASSOCIATION_RETAIN`: 关联对象遵循`retain`语义,会调用`retain`方法。 - `OBJC_ASSOCIATION_COPY`: 关联对象遵循`copy`语义,会...

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

    在Objective-C中,存在五种关联策略:OBJC_ASSOCIATION_ASSIGN、OBJC_ASSOCIATION_RETAIN_NONATOMIC、OBJC_ASSOCIATION_COPY_NONATOMIC、OBJC_ASSOCIATION_RETAIN和OBJC_ASSOCIATION_COPY。前两个策略和后两个策略的...

    iOS常见面试题

    #### 三、属性 `readwrite`,`readonly`,`assign`,`retain`,`copy`,`nonatomic` 各是什么作用,在那种情况下用? - **`readwrite`**: - 默认属性,表示同时生成get方法和set方法。 - 适用于需要可读写属性的...

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

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

Global site tag (gtag.js) - Google Analytics