zoukankan      html  css  js  c++  java
  • 内存管理之引用计数

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

  • 相关阅读:
    DButils工具类能够用来获取数据库连接向数据库插入更新删除对象
    Android 实现ActionBar定制
    查看CentOs6.5/7的系统版本号
    安装Was liberty之步骤
    在centOS上安装VNC
    SCP远程拷贝命令
    Was liberty资料总结
    罗杰斯:做你喜欢的工作,你会变成个有钱人
    【Java/csv】一个CSV文件解析类(转载)
    当你的才华还撑不起你的野心时,那你就应该静下心来学习。
  • 原文地址:https://www.cnblogs.com/acBool/p/5143628.html
Copyright © 2011-2022 走看看