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

转载 2012年03月22日 18:40:03
 

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

Objective-C - ARC(Automatic Reference Counting)自动引用技术详解

ARC特点与判断准则/* ARC的判断准则:只要没有强指针指向对象,就会释放对象 1.ARC特点 1> 不允许调用release、retain、retainCount 2> 允许重写deall...
  • wangzi11322
  • wangzi11322
  • 2015年04月23日 09:52
  • 1214

在支持ARC工程中编译不支持ARC的文件

Xcode4.2(iOS 5)以后启用了ARC技术,虽然4.2以后版本仍然可以不开启ARC,但是我们在建工程的时候有时为了不想管理内存然后就启用了ARC,但是再开发过程中需要用到第三开发类库,而这些第...
  • duxinfeng2010
  • duxinfeng2010
  • 2013年03月23日 14:26
  • 7428

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

首先,先不谈ARC,先上一张图,弄清楚iOS下内存管理的基本原理:     这就是手动内存管理的原理,通过对对象应用的计数来判断何时(计数为0时)销毁对象,现在ARC自动为你做了这一切,当然...
  • wilmer_wu
  • wilmer_wu
  • 2011年11月15日 20:12
  • 3833

【iOS开发】JSONKit does not support Objective-C Automatic Reference Counting(ARC)

问题描述:使用JSONKit,如果遇到“JSONKit does not support Objective-C Automatic Reference Counting(ARC)”这种情况。原因:J...
  • Hanrovey
  • Hanrovey
  • 2016年12月14日 11:14
  • 912

XCode中遇到not available in automatic reference counting mode 报错

最近在学习object C的过程中,尝试着编写demo中的程序,结果就出现了很多的莫名其妙的问题。而这些问题又都不是语法本身的问题。那么就是编译器本身的问题了。今天就遭遇到了一个这样的问题。    ...
  • helinlin007
  • helinlin007
  • 2016年03月16日 21:04
  • 2832

'release' is unavailable: not available in automatic reference counting modeAutomatic

在新发布的ios5中,有个很吸引眼球的特性就是“Automatic Reference Counting”,简单来说就是内存自动回收,看起来似乎是平时开发中遇到的各种内存问题的福音,仔细了解了一下,似...
  • ccccdddxxx
  • ccccdddxxx
  • 2013年12月22日 16:13
  • 8369

error: 'retain' is unavailable: not available in automatic reference counting

混合使用ARC和非ARC
  • wengyupeng
  • wengyupeng
  • 2016年07月23日 17:20
  • 3573

【已解决】iOS编程过程中出错:’autorelease’ is unavailable: not available in automatic reference counting mode, AR

http://www.crifan.com/ios_error_autorelease_is_unavailable_not_available_in_automatic_reference_coun...
  • qinglinyi
  • qinglinyi
  • 2013年06月27日 23:07
  • 2088

iOS5 Automatic Reference Counting

ARC是什么 ARC是iOS 5推出的新功能,全称叫 ARC(Automatic Reference Counting)。简单地说,就是代码中自动加入了retain/release,原先需要手动...
  • jiangzhesmile
  • jiangzhesmile
  • 2012年07月09日 19:19
  • 428

关于NSAutoreleasePool' is unavailable: not available in automatic reference counting mode的解决方法

Xcode是Version 4.2 Build 4D151a 根据Objective-c 2.0程序设计上的旧版本的代码会发生NSAutoreleasePool' is unavailable:...
  • xbl1986
  • xbl1986
  • 2012年01月28日 11:46
  • 4074
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Automatic Reference Counting(ARC)特性学习(iOS5新特性学习之五)
举报原因:
原因补充:

(最多只允许输入30个字)