ARC(Automatic Reference Counting) 到现在已经出来一年有余,越来越多的团队已经体会到他的好处。曾和同行们讨论过新手是否有必要深入学习手动内存管理。个人认为从arc开始的成本要低很多,而且能编译出强壮的代码,何乐不为?
如果需要持有一个对象,那么对其发送retain 如果之后不再使用该对象,那么需要对其发送release(或者autorealse) 每一次对retain,alloc或者new的调用,需要对应一次release或autorealse调用
自动内存其实也简单
在你的工程中使用 ARC 非常简单。你还像往常一样编程,只是不再调用 retain,release 和 autorelease 了。
变量声明缺省都带有__strong关键字,如果变量什么关键字都不写,那么缺省就是强参照。
该概念是新特性,从 iOS 5/ Mac OS X 10.7 开始导入。由于该类型不影响对象的生命周期,所以如果对象之前就没有持有者,那么会出现刚创建就被破弃的问题,比如下面的代码。
1 2 |
|
以上是一个__weak的例子,由于string没有赋值给任何变量,所以这里返回值是null
该关键字与weak一样,也是弱参照,与weak的区别只是是否执行nil赋值(Zeroing)。但是这样,需要注意变量所指的对象已经被破弃了,地址还还存在,但内存中对象已经没有了。如果还是访问该对象,将引起「BAD_ACCESS」错误。
使用ARC,你不能使用NSAutoReleasePool类来管理自动释放池了,作为替代,ARC使用一个新的语法结构:
1 2 3 |
|
另外,Xcode 4.2开始,增加了旧代码向 ARC 代码自动转换的功能。有兴趣的朋友可以试试。位置是:
Edit->Refactor->Convert to Objective-C ARC