内存管理之引用计数
在一些开发语言中,内存管理使用的是引用计数的方法,比如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