ARC工作原理是在编译程序的时候由Xcode将内存操作的代码(如:retain,release和autorelease)自动添加到需要的位置。
ARC只能在iOS4和iOS5上使用,weak preferences只能在iOS5上使用,并且只能是工程在ARC管理内存的时候才能用。
老版本的工程是可以转换成使用ARC的工程的,转换规则包括:
1,去掉所有的retain,release,autorelease
2,把NSAutoRelease替换成@autoreleasepool{}块
3,把assign的属性变为weak
使用ARC的一些强制规定:
1,不能直接调用dealloc方法,不能调用retain,release,autorelease,retainCount方法,包括@selector(retain)的方式也不行
2,可以用dealloc方法来管理一些资源,但不能用来释放实例变量,也不能在dealloc方法里面去掉[super 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)
9,不能以new为开头给一个属性命名
10,声明outlet时一般应当使用weak,除了对StoryBoard这样nib中间的顶层对象要用strong
11,weak相当于老版本的assign,strong相当于retain
对工程的单个文件制定不使用ARC的方法:在targets的build phases选项下Compile Sources下选择不要使用arc编译的文件,双击它,输入-fno-objc-arc即可