A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 847374032 中级黑马   /  2016-2-14 19:19  /  1645 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

MRC与ARC的区别是什么

1 个回复

倒序浏览
MRC (MannulReference Counting)  手动内存管理  就是在编写程序的过程中 又我们程序员自己写retain  release 来操纵OC对象何时保留,何时销毁.  规则就是谁创建谁release等等那一套几乎被说烂了的口诀  ,
但是理论上,如果完全透彻的掌握某个对象的生命周期,那么仅在创建时retain一次,在不需要时只release一次就可以了,这种情况下效率是飞快的,但绝对没有这样的人,因为一个项目所涉及的对象浩如烟海,对象间的关系错综复杂,所以需要我们时刻管理每个对象的引用计数器(retainCount),而程序本身只需要在计数器为0的时候销毁这个对象就足够了.

ARC(Automatic Reference Counting) 自动引用计数  是4.1版本提出的, 他可以让程序员从繁复的retain/release pair中解脱出来,据说ARC底层是直接调用runtime的C函数来实现retain和release的 而不是OC的retain和release方法,这样势必使得在相同代码量的情况下,ARC的效率要快于MRC
然而也不是说MRC就一定比ARC慢  ,举个例子:
JSONKit 为了达到极限的速度(比Apple自带的快一倍),他极限优化了retain,release,就是上面所说的对生命周期了解透彻,从而大幅度减少retain和release的次数,这样采用MRC的代价远小与ARC,因为一旦你用了ARC,许多事请就由不得你自己了,每一次引用或创建都要做release,这就是在保证稳定性的目的下牺牲了性能和效率.
然而尽管这样说,对于我们这些不是大牛的程序员,还是要时刻跟上ARC的脚步,因为我们并没有能力在一个完整的项目中只对某个对象使用几次retain和release就将其内存管理的很好.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马