内存管理之引用计数

在一些开发语言中,内存管理使用的是引用计数的方法,比如Python、ObjC等。

采用引用计数,开发人员不需要管理内存,能够从内存管理繁琐的工作中脱离出来,从而将更多的精力花费在开发程序上。

引用计数的原理:Python和Objc中的每个对象内部都维护着一个引用计数器,当新建一个对象,或者有其他对象引用该对象时,引用计数器就会加1;当引用减少一次的时候,引用对象的计数器就会减1,当引用计数器为0时,系统会自动的回收这个对象所占用的内存。

举例来说,在Python中:

a = 5  #分配了一块内存,该内存的值是对象5,a指向了这块内存,对象5的引用计数值为1
b = a   #b也指向了对象5所在的内存,此时对象5的引用计数值为2
b = 6   #分配了新的内存,该内存的值是对象6,b指向了这块内存,对象5的引用计数值减1变为1
del a  #对象5的引用计数再减少1,变为0,此时系统就可以回收对象5所占用的内存

在Python中,查看两个引用是否指向了同一个对象,可以使用 id() 函数来验证。

在iOS开发中,从iOS5开始引入了ARC(Automatic Reference Counting)机制,程序在编译和运行时,Xcode可以自动的给代码添加内存释放的代码,因此程序员不再需要手动写释放代码,即 release 操作。

简单介绍一下ObjC中的内存管理。

在ObjC中,当调用一个对象的 alloc、retain、new、copy方法时,该对象的引用计数器就会加1,当调用该对象的release方法时,该对象的引用计数器就会减1,当一个对象的引用计数器为0时,系统会自动的回收该对象所占用的内存。回收该对象的内存时,会调用该对象的 dealloc 方法。因此,可以通过查看是否调用了dealloc方法来判断是否释放了该对象的内存。

由于现在大多数的iOS开发都是基于ARC的,因此就不再详细介绍iOS的内存管理,如有兴趣,可以参考网上的这篇文章:

http://www.cnblogs.com/kenshincui/p/3870325.html

posted @ 2016-01-19 22:24  acBool  阅读(729)  评论(8编辑  收藏  举报