Automatic Reference Counting(ARC)特性学习(iOS5新特性学习之五)

 

Automatic Reference Counting(ARC)特性学习(iOS5新特性学习之五)

分类: iOS5新特性学习 内存管理   670人阅读  评论(1)  收藏  举报

首先,先不谈ARC,先上一张图,弄清楚iOS下内存管理的基本原理:


    这就是手动内存管理的原理,通过对对象应用的计数来判断何时(计数为0时)销毁对象,现在ARC自动为你做了这一切,当然,ARC是在编译的时候自动在目标代码里面恰当的地方加了一些retain, release, 和autorelease语句而已。所以,如果使用ARC来进行内存管理,则可以把关注点更多地放在代码逻辑等方面,而不用牵绊于内存地释放等问题了。下面谈谈应用ARC的一些规则:

1、关于ARC的适用范围:只能在iOS4和iOS5上使用,如果使用了weak references,就只能在iOS5上使用了。

2、Apple推荐在所有的新工程中使用ARC来进行内存管理,针对老的应用,XCode4.2也提供了一个工具来进行转换(Edit-Refactor-Convert to Objective-ARC)。转换的规则包括:

(1)去掉所有的retain、release、autorelease

(2)把 NSAutoReleasePool替换为@autoreleasepool {}块

(3)把@property(assign)变为@property(weak)

3、使用ARC的若干强制性规定

(1)不能显式地调用dealloc方法,不能实现或调用retain, release, retainCount或者autorelease方法。当然,包括使用@selector(retain)这样的方式来调用也不行。

(2)可以自己实现一个dealloc方法来管理一些资源,但不不能用来释放实例变量,注意自定义dealloc方法式不要去调用[super dealloc],即父类的dealloc方法,否则会引起编译错误。在ARC下,对父类的dealloc同样有编译器来自动完成。

(3)对于Core Foundation类型的对象来说(基本类型),仍然可以使用CFRetain, CFRelease这些方法

(4)不能够再使用NSAllocateObject和NSDeallocateObject对象

(5)不能都在C结构体中使用对象指针,如果要实现类似的功能,可以创建一个Objective-C类来管理这些对象。

(6)在id和void *之间没有简便的转换方法,同样的,在Objective-C对象和Core Foundation类型之间的转换都需要使用编译器指定的转换函数。

(7)不能再使用NSAutoreleasePool对象了,ARC提供了@autoreleasepool块来替代它,这会更加有效率。

(8)不能使用内存存储区了,即不能再使用NSZone,这早已是被Objective-C的运行时抛弃的东西

(9)不能以new为开头来给一个property命名

(10)声明outlet时,一般都应当使用weak,除了对StoryBoard Segue这样nib中间中的顶层对象,就要用strong了。

4、对工程中的单个文件指定不使用arc的方法:在targets的build phases选项下Compile Sources下选择要不使用arc编译的文件,双击它,输入-fno-obj-arc即可,如下图:


参考文章:http://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/_index.html#//apple_ref/doc/uid/TP40011226

                    http://clang.llvm.org/docs/AutomaticReferenceCounting.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值