ARC和MRC混用的解决方法
2015-11-15 14:35
281 查看
一,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)->进入设置选项;
![](http://img.blog.csdn.net/20151115150935298?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
三,ARC和MRC的混编使用
虽然ARC已成为苹果主推的内存管理方法,但仍有很多的地方框架,使用的是MRC来管理内存。所以在ARC和MRC混合使用时,仍要让它们能够在同一个工程中使用;
1>ARC用在MRC项目中
如何在未使用arc的工程中引入一个使用了arc特性的文件:
选中工程->TARGETS->相应的target然后选中右侧的“Build Phases”,向下就找到“Compile Sources”,然后对对相应的文件添加: -fobjc-arc 参数。
![](http://img.blog.csdn.net/20151115151718149?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
2.MRC用在ARC项目中
如何在arc的工程中引入一个使用了MRC特性的文件:
选中工程->TARGETS->相应的target然后选中右侧的“Build Phases”,向下就找到“Compile Sources”,然后对对相应的文件添加: -fno-objc-arc参数
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的混编使用
虽然ARC已成为苹果主推的内存管理方法,但仍有很多的地方框架,使用的是MRC来管理内存。所以在ARC和MRC混合使用时,仍要让它们能够在同一个工程中使用;
1>ARC用在MRC项目中
如何在未使用arc的工程中引入一个使用了arc特性的文件:
选中工程->TARGETS->相应的target然后选中右侧的“Build Phases”,向下就找到“Compile Sources”,然后对对相应的文件添加: -fobjc-arc 参数。
2.MRC用在ARC项目中
如何在arc的工程中引入一个使用了MRC特性的文件:
选中工程->TARGETS->相应的target然后选中右侧的“Build Phases”,向下就找到“Compile Sources”,然后对对相应的文件添加: -fno-objc-arc参数
相关文章推荐
- 混合高斯模型GMM和EM算法
- Linux alien命令
- TS科普12 流id解析
- Android最佳实践(译)
- nyoj--203--三国志(迪杰斯特拉+背包)
- listview的优化
- 第11周-数学方面:Complex类
- Android Studio的使用(五)--导入第三方Jar包
- thinkphp3.2独立分组的建立
- 自己做的demo---c语言的基本语法,过阵子可以重新写一些算法跟数据结构了
- nyoj--203--三国志(迪杰斯特拉+背包)
- 关于chrome浏览器打不开编写的jquery mobile—报错“ cannot be created in a document with origin 'null'.”
- HTML5本地存储之Web SQL+LocalStorage+ApplicationCache以及indexed+LocalStorage+ApplicationCache构建的离线应用实例代码
- 在 Visual Studio 2010 中创建 ASP.Net Web Service
- LeetCode(169)Majority Element and Majority Element II
- scanf 用法及陷阱(转)
- Linux cpulimit命令
- ArcGIS for Server常见问题集锦(一)
- Merge Sorted Array
- GregorianCalendar类