
『导言』
亲们,可能在开发中遇到变态需求,在ARC或者MRC之间切换?那怎么宏代码判断当前环境是ARC还是MRC?
在Xcode设置MRC与ARC混编?
iOS5.0以后就开始可以使用ARC( Automatic Reference Counting:自动引用计数 )来代替之前的MRC(Manual Reference Counting:人工引用计数)。使用ARC会减少很多代码和忘了释放对象的苦恼。但是事情都有两面性。使用了ARC之后如果你想复用以前写过的使用MRC的类, 就会出报错。这时候怎么办?方法比较简单, 只需要做下面的一个步骤就可以解决:
| 转换 | 设置命令 | 注释 |
|---|---|---|
MRC转ARC
|
-fno-objc-arc |
使原来不支持ARC的代码,支持ARC
|
ARC转MRC
|
-fobjc-arc |
使原来不支持MRC的代码,支持MRC
|
ARC工程中也可以使用MRC的类
在Targets的Build phases选项下Compile Sources下选择要不使用arc编译的文件,双击它,输入 -fno-objc-arc 即可

图.ARC转MRC
MRC工程中也可以使用ARC的类。方法如下:
在Targets的Build phases选项下Compile Sources下选择要不使用arc编译的文件,双击它,输入 -fobjc-arc 即可

图.MRC转ARC
iOS 开发中如何用宏判断是ARC环境还是MRC环境?
宏代码:
//条件满足ARC
#if __has_feature(objc_arc)
// 否则执行MAC
NSLog(@"ARC");
#else
NSLog(@"MRC");
# endif

图 .放松时刻.gif