OC的内存管理机制

总的来说OC有三种内存管理机制,下面将分别对这三种机制做简要的概述。

1、手动引用计数(Mannul Reference Counting-MRC)

  mannul:用手的,手工的.  引用计数:retaincount

  从英文字面上理解就是在这种机制下,内存需要程序员去手动管理,即通过在代码中调用-retain、-release或者-autorelease去增加和减小对象的引用计数,当引用计数为0时,对象会自动调用-dealloc方法释放所占用的内存。

2、垃圾回收机制(Garbage Collection-GC)

  garbage:垃圾,废物.  collection:收集,收藏.

  英文还是很形象生动的吧,所谓垃圾回收机制就是系统对不再使用的对象进行收集,并在间隔一定时间后将它们集体释放。看到collection就很自然的想到这样会占用一定的系统资源,这也是它没有被部署到iOS平台的原因。而OS X也只是在一段时间内使用过它,在ARC成熟后便被废弃了。

3、自动引用计数(Automatic Reference Counting-ARC)

  automatic:自动的.

  这个automatic体现在什么地方呢?它和GC有什么优点使它能取代GC呢?

  automatic所体现的地方在于,它和GC有着明显的不同,因为它是通过编译器实现的,即ARC程序在编译阶段编译器会根据需要自动的添加-retain和-release的调用,无需我们程序员插手。是不是很像MRC?

  每当一个对象被引用时,它的引用计数就会进行+1操作,当其被release时,引用计数就会相应的-1,当减少到0时,对象会自动调用-dealloc函数进行释放,这和MRC如出一辙,因此不需要系统对其进行管理不需要的对象也能够得到及时的释放,从而也减少了内存压力。所以其取代垃圾回收机制也是理所当然的。

原文地址:https://www.cnblogs.com/mmhc/p/5027914.html