ARC和MRC混用的解决方法

一,ARC与MRC的基本知识

1>ARC基本概念

ARC (Automatic Reference Counting:自动引用计数)是苹果公司在ios 5 推出的新功能。简单地说,就是代码中自动加入了retain/release,原先需要手动添加的用来处理内存管理的引用计数的代码可以自动地由编译器完成了。该机制能在 iOS 5/ Mac OS X 10.7 开始导入,利用 Xcode4.2 可以使用该机能。

注意:

在ARC下dealloc虽然可以被重载,但是不能调用[super dealloc];

2>ARC的优缺点

优点:

第一:简单。以后进行APP开发,写Objective-C的代码时,我们不需要担心烦人的内存管理,担心内存泄露。

第二:减少了代码量,高效。不用关心内存管理,代码的总量就会减少,节省劳动力。

缺点:

第一:易报错。由于很多第三方代码是通过MRC开发的,引用时,易造成"Automatic Reference Counting Issue"的错误信息。

4>在ARC内存管理模式下,其属性的标识符存在以下几种:

@property (nonatomic/atomic, assign/retain/strong/weak/unsafe_unretained/copy,readonly/readwrite) Number* num;//默认为unsafe_unretained


MRC基本概念

1>MRC的基本概念

MRC(MannulReference Counting:手动引用计数)在MRC的内存管理模式下,与对变量的管理相关的方法有:retain,release和autorelease。retain和release方法操作的是引用记数,当引用记数为零时,便自动释放内存。并且可以用NSAutoreleasePool对象,对加入自动释放池(autorelease调用)的变量进行管理,当drain时回收内存。

(1)      retain,该方法的作用是将内存数据的所有权附给另一指针变量,引用数加1,即retainCount+= 1;

(2)      release,该方法是释放指针变量对内存数据的所有权,引用数减1,即retainCount-= 1;

(3)      autorelease,该方法是将该对象内存的管理放到autoreleasepool中。

 2>在MRC内存管理模式下,其属性的标识符存在以下几种:

@property (nonatomic/atomic,retain/assign/copy, readonly/readwrite) Number* num;

(1)      nonatomic/atomic,表示该属性是否是对多线程安全的,是不是使用线程锁,默认为atomic,

(2)      retain/assign/copy,是有关对该属性的内存管理的,

二,设置ARC和MRC

 选择Target->Build Settings(搜索gar)->进入设置选项;

ARC和MRC混用的解决方法_第1张图片

三,ARC和MRC的混编使用

虽然ARC已成为苹果主推的内存管理方法,但仍有很多的地方框架,使用的是MRC来管理内存。所以在ARC和MRC混合使用时,仍要让它们能够在同一个工程中使用;

1>ARC用在MRC项目中

如何在未使用arc的工程中引入一个使用了arc特性的文件:
选中工程->TARGETS->相应的target然后选中右侧的“Build Phases”,向下就找到“Compile Sources”,然后对对相应的文件添加: -fobjc-arc 参数。

ARC和MRC混用的解决方法_第2张图片

2.MRC用在ARC项目中

如何在arc的工程中引入一个使用了MRC特性的文件:
选中工程->TARGETS->相应的target然后选中右侧的“Build Phases”,向下就找到“Compile Sources”,然后对对相应的文件添加: -fno-objc-arc参数


你可能感兴趣的:(Objective-C,内存管理,编译器)