1 三者的区别

  首先,引用计数的概念:表示对象被引用的次数。当引用计数为 0 的时候,系统就会发送dealloc消息来释放内存。

  assign:用于基本数据类型,没有引用计数,因此不存在增加或减少引用计数;
  retain: 对象引用计数会+1;
  copy:

    1 可变对象为深拷贝(指针赋值且在堆里面将对象赋值一份,引用计数不变),不可变对象为浅拷贝(只对指针赋值然后引用计数+1)。所谓深拷贝就是给指针赋值且指向的对象也拷贝一份,浅拷贝只给指针赋值不拷贝对象。

    2 可变与不可变对象的转变:不可变对象→可变对象的转换:对象.mutableCopy。可变->不可变:对象.copy;

    3 为什么可变对象与不可变对象有深浅拷贝之分呢?很简单,出于对节省内存的考虑。对于不可变对象,因为它不可变,所以无论有多少使用者,都是同一份东西,那么我只要在内存中保留一份即可。而对于可变对象,假设甲乙都引用了A,甲改变了A,如果乙再使用可能就会引起错误。——原因是个人猜测

    4 最后,深浅拷贝这种说法可以区分两种拷贝,只是一种叫法,但是刚接触让人很迷糊。

  2 释放方法

  release:对象引用计数-1,如果为 0 则发送 dealloc 释放内存;

  autorelease:只是把对象放入自动释放池,这是一个编译器属性,编译器会在合适的地方调用autorelease。
MRC 与 ARC:手动管理内存和自动管理内存,(先说下引用计数)手动管理需要程序员调用 retain release
等方法来手动管理内存。自动管理是把对象指针放进自动释放池,当自动释放池被销毁时发送 release 消息,引用计数-1,如果减为0则系统自动发送dealloc释放内存。另外,Core Foundation的对象为C对象,自动释放池不会接管,需要另一套:CFRetain与CFRelease。

assign、retain、copy使用异同的更多相关文章

  1. assign retain copy

    举个例子: NSString *houseOfMM = [[NSString alloc] initWithString:'装梵几的三室两厅']; 上面一段代码会执行以下两个动作:  1 在堆上分配一 ...

  2. assign, retain, copy, weak, strong

    一.assign, retain, copy 的区别(引用计数 RC reference count) 参考:IOS基础:retain,copy,assign及autorelease 1. 假设你用m ...

  3. 对于atomic nonatomic assign retain copy strong weak的简单理解

    atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作 1)atomic 设置成员变量的@property属性时,atomic是默认值,提供多线程安全 在多线程环 ...

  4. Objective-c的@property(atomic,nonatomic,readonly,readwrite,assign,retain,copy,getter,setter) 属性特性

    assign:指定setter方法用简单的赋值,这是默认操作.你可以对标量类型(如int)使用这个属性.你可以想象一个float,它不是一个对象,所以它不能retain.copy. retain:指定 ...

  5. 如果将synthesize省略,语义特性声明为assign retain copy时,自己实现setter和getter方法

    如果将synthesize省略,并且我们自己实现setter和getter方法时,系统就不会生成对应的setter和getter方法,还有实例变量 1,当把语义特性声明为assign时,setter和 ...

  6. 假设将synthesize省略,语义特性声明为assign retain copy时,自己实现setter和getter方法

    假设将synthesize省略,而且我们自己实现setter和getter方法时,系统就不会生成相应的setter和getter方法,还有实例变量 1,当把语义特性声明为assign时,setter和 ...

  7. 假设synthesize省略,语义属性声明assign retain copy时间,为了实现自己的setter和getter方法

    假设synthesize省略,而且我们自己实现setter和getter方法时,系统就不会生成相应的setter和getter方法,还有实例变量 1,当把语义特性声明为assign时,setter和g ...

  8. assign、copy 、retain等关键字的含义

    assign: 简单赋值,不更改索引计数copy: 建立一个索引计数为1的对象,然后释放旧对象retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1Copy其实是建立了一个 ...

  9. iOS中assign,copy,retain之间的区别以及weak和strong的区别

    @property (nonatomic, assign) NSString *title; 什么是assign,copy,retain之间的区别? assign: 简单赋值,不更改索引计数(Refe ...

  10. iOS中assign、copy 、retain等关键字的含义

    iOS中assign.copy .retain等关键字的含义  转自:http://my.oschina.net/majiage/blog/267409 assign: 简单赋值,不更改索引计数cop ...

随机推荐

  1. andriod + @的区别

    Android中的组件需要用一个int类型的值来表示,这个值也就是组件标签中的id属性值. id属性只能接受资源类型的值,也就是必须以@开头的值,例如,@id/abc.@+id/xyz等. 如果在@后 ...

  2. 如何安装RHEL7.2x64 即红帽7.2虚拟机?

                                                   虚拟机RHEL7.2x64的安装步骤   第一步:创建虚拟机 第二步:典型安装下一步: 第三步:创建空的硬 ...

  3. 做一个会PS切图的前端开发

    系列链接 做一个会使用PS的前端开发 做一个会PS切图的前端开发 切图方法分类 PhotoShop从CS版本演变到现在的CC版本,切图功能发生了比较大的变化,我们可以把PhotoShop CS版本时的 ...

  4. STL : map函数的运用 --- hdu 4941 : Magical Forest

    Magical Forest Time Limit: 24000/12000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Other ...

  5. C# 获取 mp3文件信息

    C# 获取 mp3文件信息[包括:文件大小.歌曲长度.歌手.专辑] 第一种方式:[代码已验证] // http://bbs.csdn.net/topics/390392612   string fil ...

  6. 判断JS对象是否拥有某属性

    两种方式,但稍有区别 1.in 运算符  

  7. Object C中的数据类型表

    类型 例子 NSLog chars char 'a', '\n'  %c short int   — %hi, %hx, %ho unsigned short int   %hu, %hx, %ho ...

  8. linux_shell_5_shell特性_正则_1

    前面我们了解了部分linux shell的相关特性,下面的链接是第4篇文章:linux_shell_4_shell特性 这里我们来继续讨论linux shell中至关重要的一个特性: 正则表达式 (r ...

  9. 泛函编程(35)-泛函Stream IO:IO处理过程-IO Process

    IO处理可以说是计算机技术的核心.不是吗?使用计算机的目的就是希望它对输入数据进行运算后向我们输出计算结果.所谓Stream IO简单来说就是对一串按序相同类型的输入数据进行处理后输出计算结果.输入数 ...

  10. 习题:codevs 1035 火车停留解题报告

    本蒟蒻又来写解题报告了.这次的题目是codevs 1035 火车停留. 题目大意就是给m个火车的到达时间.停留时间和车载货物的价值,车站有n个车道,而火车停留一次车站就会从车载货物价值中获得1%的利润 ...