OC ARC与MRC
2015-10-23 10:04
302 查看
Objective-C提供了三种内存管理方式:
1、MannulReferenceCounting(MRC,手动管理,在开发iOS4.1之前的版本的项目时我们要自己负责使用引用计数来管理内存,比如要手动retain、release、autorelease 等,而在其后的版本可以使用ARC,让系统自己管理内存。)
2、automaticreference counting(ARC,自动引用计数,iOS4.1 之后推出的)
3、garbagecollection(垃圾回收)。iOS不支持垃圾回收; ARC作为苹果新提供的技术,苹果推荐开发者使用ARC技术来管理内存;
内存管理的原理:
对象的引用计数器:
每个OC对象都有自己的引用计数器,是一个整数,表示对象被引用的次数。当对象一创建时,默认的计数器值为1;
当对象的引用计数器的值为0时,则对象被销毁,这个对象所对应的内存将被释放
手动管理内存, 可以简称MRC (Manual ReferenceCounting)
Automatic ReferenceCounting,自动引用计数,即ARC,可以说是WWDC2011和iOS5所引入的最大的变革和最激动人心的变化。ARC是新的LLVM3.0编译器的一项特性,使用ARC,可以说一举解决了广大iOS开发者所憎恨的手动内存管理的麻烦。
在工程中使用ARC非常简单:只需要像往常那样编写代码,只不过永远不写retain,release和autorelease三个关键字就好~这是ARC的基本原则。
当ARC开启时,编译器将自动在代码合适的地方插入retain,release和autorelease,而作为
开发者,完全不需要担心编译器会做错(除非开发者自己错用ARC了)。
ARC与其他语言的”垃圾回收”机制不同。ARC:编译器特性;“垃圾回收”运行时特性
mrc,手动管理;如果mrc内存不释放就会出错,调用一次对象就要 调用[xx release]来释放对象,[xx release]要写在调用对象的后面,重写dealloc方法在控制台中可查看对象是否释放完毕。 也可以使用[xx autorelease] 来释放对象。
arc,自动引用计数管理;
开发中如何使用:开发中尽量使用arc。
1、MannulReferenceCounting(MRC,手动管理,在开发iOS4.1之前的版本的项目时我们要自己负责使用引用计数来管理内存,比如要手动retain、release、autorelease 等,而在其后的版本可以使用ARC,让系统自己管理内存。)
2、automaticreference counting(ARC,自动引用计数,iOS4.1 之后推出的)
3、garbagecollection(垃圾回收)。iOS不支持垃圾回收; ARC作为苹果新提供的技术,苹果推荐开发者使用ARC技术来管理内存;
内存管理的原理:
对象的引用计数器:
每个OC对象都有自己的引用计数器,是一个整数,表示对象被引用的次数。当对象一创建时,默认的计数器值为1;
当对象的引用计数器的值为0时,则对象被销毁,这个对象所对应的内存将被释放
手动管理内存, 可以简称MRC (Manual ReferenceCounting)
Automatic ReferenceCounting,自动引用计数,即ARC,可以说是WWDC2011和iOS5所引入的最大的变革和最激动人心的变化。ARC是新的LLVM3.0编译器的一项特性,使用ARC,可以说一举解决了广大iOS开发者所憎恨的手动内存管理的麻烦。
在工程中使用ARC非常简单:只需要像往常那样编写代码,只不过永远不写retain,release和autorelease三个关键字就好~这是ARC的基本原则。
当ARC开启时,编译器将自动在代码合适的地方插入retain,release和autorelease,而作为
开发者,完全不需要担心编译器会做错(除非开发者自己错用ARC了)。
ARC与其他语言的”垃圾回收”机制不同。ARC:编译器特性;“垃圾回收”运行时特性
mrc,手动管理;如果mrc内存不释放就会出错,调用一次对象就要 调用[xx release]来释放对象,[xx release]要写在调用对象的后面,重写dealloc方法在控制台中可查看对象是否释放完毕。 也可以使用[xx autorelease] 来释放对象。
arc,自动引用计数管理;
开发中如何使用:开发中尽量使用arc。
相关文章推荐
- cocos2d-x引擎目录结构分析
- vs生成失败不报错
- extern "c"用法解析
- 源码推荐(10.20):GitHub iPhone 客户端--MrCode,实时跟踪分析iOS App视图的小工具
- CLRS 8.1排序算法的下界
- Sublime2 + SASS + Koala 测试
- 使用ZBarSDK 出现Undefined symbols for architecture armv7的问题
- shell编程报错 [: missing `]'
- C语言字符检测函数
- 【工作感悟】——如何使你的沟通更有效?
- Sqlserver 备份脚本——配置邮件
- TCP的几个状态 (SYN, FIN, ACK, PSH, RST, URG)
- 基于spring注解,泛型的使用
- windows下ipython的tab补全,只需安装pyreadline即可.
- sqlite3把字段为int32(用c++的time(nullptr)获取的)的秒数显示为年月日时分秒
- maven 如何解决因本地jar导致的编译错误
- svn 常用指令
- WORD2010 如何取消自动编号功能
- UVa10635--Prince and Princess(LCS转LIS)
- Win32_baseboard 主板 参数说明