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

  • 相关阅读:
    团队项目——技术规格说明书
    Scrum Meeting 11.1
    Scrum Meeting 10.31
    Scrum Meeting 10.30
    Scrum Meeting 10.29
    Scrum Meeting 10.28
    Scrum Meeting 10.27
    Scrum Meeting 10.26
    团队作业Week5
    Boost C++: 数据结构---tuple
  • 原文地址:https://www.cnblogs.com/acBool/p/5143628.html
Copyright © 2011-2022 走看看