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就将其内存管理的很好. |