ARC和MRC混合模式下的编译问题

在一个支持ARC (Automatic Reference Counting)的项目中,有时候需要禁止其中几个文件使用ARC模式编译(比如你用了第三方不支持ARC的类库)。这时就要点击工程文件,在target->build phases->Compiler flags中添加“-fno-objc-arc"

反之如果希望在MRC的项目中支持ARC模式,这时就要点击工程文件,在target->build phaese->compiler flags中添加“-fobjc-arc”

时间: 2024-11-11 02:53:04

ARC和MRC混合模式下的编译问题的相关文章

iOS开发ARC与MRC下单例的完整写法与通用宏定义

#import "XMGTool.h" /** * 1:ARC下的完整的单例写法:alloc内部会调用+(instancetype)allocWithZone:(struct _NSZone *)zone方法,所以重写该方法,用GCD一次性函数,默认是线程安全的加了一把锁,也可以自己去加锁 @synchronized(self) { if (_instance == nil) { _instance = [super allocWithZone:zone]; } } 2:还要考虑cop

@autoreleasepool在ARC和MRC下的区别

MRC这个词应该是我编的,ARC,Automatic Reference Counting,手工引用计数就应该是:Manual Reference Counting,那就应该是MRC喽,不过没有见人这样用过. ARC引入了新的语句管理自动释放池语法: @autoreleasepool {     // Code, such as a loop that creates a large number of temporary objects.} 测试了一下,在ARC情况下和MRC情况下对象的释放有

ARC、MRC混编

Xcode5之后,新建iOS工程,默认都是ARC模式,但是有时候我们的项目中需要用到一些第三方框架,我们下载下来却发现是非ARC的,这时候我们需要进行ARC和MRC混编. 第一种方式: Edit->Refactor,转换成ARC方式 著名的iOS网络框架ASIHTTPRequest就是MRC,我们试试能不能转换成ARC 点击Check,我们发现悲剧了 多数情况下这种方式都会出错,那该怎么办呢? 第二种方式: 给编译器加标记 可以在Build Phases中的Compile Sources中加入编

ARC与MRC的性能对比

MRC似乎已经是一个上古时代的话题了,不过我还是绕有兴致的把它翻出来.因为,今天我被一个问题问住了:ARC与MRC的性能方面孰优劣.确实,之前没有对比过. 先来做个测试吧.首先我们需要一个计时辅助函数,我选择使用mach_absolute_time,计算时间差的函数如下: double subtractTimes(uint64_t endTime, uint64_t startTime) {     uint64_t difference = endTime - startTime;     s

iOS arc VS mrc学习笔记

一.* Core Foundation与objective-c Object进行交换 * 对于Core Foundation与objective-cObject进行交换时,需要用到的ARC管理机制有: (1) (__bridge_transfer) op or alternatively CFBridgingRelease(op) is used to consume a retain-count of a CFTypeRef while transferring it over to ARC.

iOS内存管理 ARC与MRC

想驾驭一门语言,首先要掌握它的内存管理特性.iOS开发经历了MRC到ARC的过程,下面就记录一下本人对iOS内存管理方面的一些理解. 说到iOS开发,肯定离不开objective-c语言(以下简称OC).OC的内存管理机制叫做引用计数,就是一块内存地址可以同时被多个对象引用,每引用一次,引用计数都会递增1,当对象每解除一次引用,引用计数就会递减1,直到引用计数为0时,系统才会讲这块内存地址回收释放掉,这与C/C++语言有些不同,但是它们都遵守同一个内存管理法则:谁申请,谁释放. 在早些时候,iO

ARC以及MRC中setter方法

ARC以及MRC中setter方法的差异 有时候,你会需要重写setter或者getter方法,你知道么,ARC与MRC的setter方法是有着差异的呢. 先看下MRC下的setter方法: 在看下ARC下的setter方法: 小结: 1. 一旦你重写了getter.setter方法,你必须使用@synthesize variable = _variable来区分属性名与方法名. 2. ARC与MRC的getter方法一致,就setter方法有着略微区别.

Block在内存中的位置在arc和mrc的区别

关于block在内存中的位置, http://tanqisen.github.io/blog/2013/04/19/gcd-block-cycle-retain/这篇文章解释的不错,但是好像并没有区分arc和mrc的区别 block的位置分为这几种 NSGlobalBlock:类似函数,位于text段: NSStackBlock:位于栈内存,函数返回后Block将无效: NSMallocBlock:位于堆内存. 不引用外部环境变量的block都属于NSGlobalBlock, NSStackBl

MRC模式下声明property属性为strong可能不会报错

定位了项目的一个问题,居然与strong有关系.首先说明一下项目是MRC内存管理的.一个NSDictionary变量在赋值一段时间后再次访问就会出现EXC_BAD_ACCESS错误,打印日志看了一下地址没变但是内容已经看不到,估计是野指针了,显然内存管理出现问题了.看这个变量的定义,是加了strong属性的,说明对应的m文件是ARC内存管理的.再在Build Phase里看这个文件有没有加-fobjc-arc选项,居然没有,加上就好了. 对于这个问题,我想着Xcode应该会对MRC模式下使用st