Cocos2d-x内存自动释放机制

本文引用自博客:

第七城市:http://www.th7.cn/Program/cp/201303/130531.shtml

首先在架构里面需要明白,如果使用new创建对象的话,我们需要自己释放内存,如果直接用引擎提供的警静态方法,我们可以不做内存管理,引擎自动处理,因为引擎背后有一个自动释放池。通过查看源码可以知道,每个静态方法都会调用autorelease()方法。如果我们需要引擎自动释放一个对象,创建后可以调用该对象的autorelease()(前提是该对象所属类继承自CCObject),该方法会把当前对象放入自动释放池中,每次帧过渡时都会去遍历检查是否可以释放掉该对象的内存。源码如下:

// 创建一个精灵对象,使用create静态方法
CCSprite * pSprite = CCSprite ::create ( "HelloWorld.png");
//深入进入可以发现create调用了autorelease方法
CCSprite * CCSprite :: create( constchar *pszFileName )
{ CCSprite * pobSprite = new CCSprite ();if ( pobSprite && pobSprite -> initWithFile( pszFileName )) {     pobSprite -> autorelease();     return pobSprite; } CC_SAFE_DELETE ( pobSprite); return NULL;
}
C_CBREAK_IF (! pSprite);
//autorelease方法把当前对象加入到了自动释放池中(CCPoolManager)
CCObject * CCObject :: autorelease( void )
{ CCPoolManager :: sharedPoolManager()-> addObject (this ); return this ;
}
//最后会去判断可以释放的时候就release掉,然后场景退出再次调用release
void CCAutoreleasePool:: addObject (CCObject * pObject)
{ m_pManagedObjectArray -> addObject( pObject ); CCAssert ( pObject-> m_uReference > 1 , "reference count should be greater than 1" ); ++( pObject-> m_uAutoReleaseCount ); pObject -> release();
}

转载于:https://blog.51cto.com/oldfan/1337782

cocos2d-x内存自动释放机制相关推荐

  1. Qt的内存释放策略(内存自动释放机制)

    关于Qt内存释放机制的简单讲解 很多C/C++初学者常犯的一个错误就是,使用malloc.new分配了一块内存却忘记释放,导致内存泄漏.Qt的对象模型提供了一种Qt对象之间的父 子关系,当很多个对象都 ...

  2. 栈上对象的内存自动释放

    1.栈上对象的内存自动释放 当栈上的对象生命周期结束时,会自动的调用对象的析构函数,并释放内存. 如果内存中有成员对象,继续调用成员对象的析构函数. class CC { public:CC() {} ...

  3. iOS中内存自动释放池

    自动释放池 iOS应用的主线程在每次runloop开始的时候创建自动释放池,在runloop结束的时候释放自动释放池.如果在一个runloop内,应用程序创建了大量临时对象,自动释放池可以减少内存峰值 ...

  4. java如何进行内存自动释放、垃圾回收?

    垃圾收集的目的在于清除不再使用的对象.gc通过确定对象是否被活动对象引用来确定是否收集该对象.gc首先要判断该对象是否是时候可以收集.两种常用的方法是引用计数和对象引用遍历. 引用计数 每个对象都含有 ...

  5. java 主动释放_java如何进行内存自动释放,垃圾回收的?

    垃圾收集的目的在于清除不再使用的对象.gc通过确定对象是否被活动对象引用来确定是否收集该对象.gc首先要判断该对象是否是时候可以收集.两种常用的方法是引用计数和对象引用遍历. 引用计数 每个对象都含有 ...

  6. oracle 游标内存自动释放,详解Oracle隐式游标和显式游标

    游标是什么?就是在内存开辟的一块临时存储空间. 1.Oracle隐式游标 1.1Oracle有常用的哪些隐式游标 1.2 Oracle隐式游标演示 -- 隐式游标 (使用的表为Oracle默认自带的e ...

  7. cocos2d-x游戏开发(五)神奇的自动释放

    欢迎转载:http://blog.csdn.net/fylz1125/article/details/8519609 其实内存自动回收不是什么新鲜的概念,Java的垃圾回收,Objective-C的自 ...

  8. 第六讲:Obj-C 内存管理4 - 自动释放池

    转:http://tigercat1977.blog.163.com/blog/static/2141561122012111294616203/ 第六讲:Obj-C 内存管理4 - 自动释放池 主要 ...

  9. C++动态内存会被自动释放吗?

    C++动态内存会被自动释放吗? 函数体内的局部变量在函数结束时自动消亡.很多人误以为示例7-6是正确的.理由是p是局部的指针变量,它消亡的时候会让它所指的动态内存一起完蛋.这是错觉! void Fun ...

最新文章

  1. 操作系统学习笔记 第四章:存储器管理(王道考研)
  2. VirtualBox uuid冲突问题
  3. Dubbo发展史谁知道?
  4. centos7 搭建vsftpd服务并锁定用户的家目录
  5. 技术沙龙直播 | 数据库技术探索及行业应用
  6. CMFCTabCtrl 切换页面闪烁问题
  7. 充电原理_电动汽车充电桩如何设置?充电桩原理介绍
  8. 结合前段修改mysql表数据_jquery实现点击文字可编辑并修改保存至数据库
  9. 气象科学与计算机应用论文,面向气象数据的智能分析方法分析-计算机应用技术专业毕业论文.docx...
  10. [转载] jstl获取Parameter参数及switch使用
  11. 微软力挺Silverlight 反击美棒球赛用Flash直播
  12. Linux之cp命令
  13. 允许其他网络用户通过此计算机的internet连接来连_「Azure云」什么是Azure虚拟网络?...
  14. 2021最新!某盘加速下载工具复活了,无需登录,打开即可高速下载(附下载)!
  15. linux下载flink安装包
  16. 申请CSDN博客专家和码云推荐项目
  17. HTML CSS JS 网页设计作业「我的家乡」汉口5页 带留言表单
  18. CCAI 2017 | 中国工程院院士李德毅:L3的挑战与量产
  19. Android Studio混淆相关总结
  20. 西门子1200plc轴运动控制程序模板

热门文章

  1. 2011下半年信息系统项目管理师考后感
  2. IKVM.NET_第一篇_概述
  3. Iframe的高级操作
  4. BlogEngine
  5. ubuntu学习日记--Lesson6:shell,bash,dash
  6. stl之multimap容器
  7. ai模仿声音软件_你准备好跟AI机器成为同事了吗?
  8. python实验报告内容实现购物车系统_Python实现的购物车功能示例
  9. 破解sourceInsight4
  10. cenyos7安装 yum不可用_centos7安装fabric