cocos2dx 内存管理机制
持续更新吧。 刚开始看了一些。
一,CCObject 提供引用计数
1,unsinged int m_uReference; //此为CCOBject的引用计数,初始化为 1; new CCObject();起引用计数为1。 这一点,与oc内存管理一致,不多写啦。
2, AutoRelease();
CCPoolManger::sharedPoolManger()->AddObject(this);//将this 放入 AutoReleasePool;
其中CCPoolManger是一个单例,管理多个CCAutoreleasePool;
CCPoolManger的成员变量 CCAutoreleasePool *m_pCurReleasePool 为当前生效的垃圾回收器;
CCPoolManger的成员变量 CCArray *m_pReleasePoolStack 可管理多个垃圾回收器
CCPoolManger 比较重要的方法:
void push(); 创建一个新的垃圾回收器,并且加入到动态数组 m_pReleasePoolStack;
void CCPoolManger::push()
{
CCAutoreleasePool *poll = new CCAutoreleasePool();
m_pCurReleasePool = poll; // 将新创建的poll赋给了 curReleasePool; 调用这个函数, 生效的ReleasePool会重新生成。
m_preleasePoolStack -> addObject(poll); //加入到动态数组。说明,pCurReleasePool 总是在动态数组 index==0 的位置;
poll->release();
}
void pop(); 清空m_pCurReleasePool, 并且把m_preleasePoolStack 中下一个 CCAutoReleasePool赋给 m_pCurReleasePool;
void CCPoolManger::pop()
{
if(!m_pCurReleasePoll) return;
int count = m_pReleasePoolStack->count();
if(count>1)
{
m_pReleasePoolStack->removeObjectAtIndex(count-1);
m_pCurReleasePool = (CCAutoReleasePoll*)m_pReleasePollStack->objectAtIndex(count-2);
}
}
还有一个方法,void addObject(CCObject* object); //此方法,是将 object 加入到 m_pCurReleasePoll中。
另一个重要的类: CCAutoReleasePool;
里面有保存CCObject的动态数组:m_pManagedObjectArray; 还应有对应的 addObject 与 RemoveObject方法
cocos2dx 内存管理机制的更多相关文章
- 2、COCOS2D-X内存管理机制
在C++中.动态内存分配是一把双刃剑,一方面,直接訪问内存地址提高了应用程序的性能,与使用内存的灵活性.还有一方面.因为程序没有正确地分配与释放造成的比如野指针,反复释放,内存泄漏等问题又严重影响着应 ...
- 【转】cocos2dx 内存管理机制
原文地址: http://www.zaojiahua.com/memory-management.html cocos2dx采用的是在堆上分配内存空间,想想看你在写程序的时候对于cocos2dx中的类 ...
- cocos2dx内存管理机制
参考以下两篇文章 http://blog.csdn.net/ring0hx/article/details/7946397 http://blog.csdn.net/whuancai/article/ ...
- cocos2d-x内存管理
Cocos2d-x内存管理 老师让我给班上同学讲讲cocos2d-x的内存管理,时间也不多,于是看了看源码,写了个提纲和大概思想 一. 为什么需要内存管理 1. new和delete 2. 堆上申 ...
- 【Cocos2d-x 3.x】内存管理机制与源码分析
侯捷先生说过这么一句话 : 源码之前,了无秘密. 要了解Cocos2d-x的内存管理机制,就得阅读源码. 接触Cocos2d-x时, Cocos2d-x的最新版本已经到了3.2的时代,在学习Coco ...
- cocos2dx的内存管理机制
首先我们必须说一下c++中变量的内存空间的分配问题,我们在c++中写一个类,可以在栈上分配内存空间也可以使用new在堆上分配内存空间,如果类对象是在栈上分配的内存空间,这个内存空间的管理就不是我们的事 ...
- Cocos2d-x 3.1 内存管理机制
Cocos2d-x使用的内存管理方式是引用计数.引用计数是一种非常有效的机制.通过给每个对象维护一个引用计数器,记录该对象当前被引用的次数.当对象添加一次引用时,计数器加1:而对象失去一次引用时.计数 ...
- cocos2d-x 3.0 内存管理机制
***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...
- cocos2d-x内存管理(见解)
cocos2d-x 延续了cocos2d 和OC的引用计数的内存管理机制! 下面我们来看看CCDriectro类 CCPoolManager::sharedPoolManager()->push ...
随机推荐
- VS2013 越来越慢
Q.VS2013 原来启动只要大概 一两秒的时间,现在启动最少也得十秒以上.而且打开项目也变得很慢了!求解决方案. 清理一下缓存就好了.devenv.exe /resetuserdata 第二:装了v ...
- PKU 2406 Power Strings(KMP最长循环不重叠字串)
题意:给一个字符串S长度不超过10^6,求最大的n使得S由n个相同的字符串a连接而成,如:"ababab"则由n=3个"ab"连接而成,"aaaa&q ...
- POJ 4046 Sightseeing 枚举+最短路 好题
有n个节点的m条无向边的图,节点编号为1~n 然后有点权和边权,给出q个询问,每一个询问给出2点u,v 输出u,v的最短距离 这里的最短距离规定为: u到v的路径的所有边权+u到v路径上最大的一个点权 ...
- 一个优秀的C#开源绘图软件 DrawTools
1.Extensions to DrawTools Author Mark Miller I develop software for a leading healthcare system in N ...
- QT之实现程序启动画面
现在好多软件都有,尤其是大型软件,他们要加载的东西太多,因此需要的事件较长,而又不希望给用户产生成为好像没有响应的情况,因此也就需要程序启动画面来实现. 当然了,用widget要比这个丰富很多,不过代 ...
- 关于 MySQL UTF8 编码下生僻字符插入失败/假死问题的分析
原文:http://my.oschina.net/leejun2005/blog/343353 目录[-] 1.问题:mysql 遇到某些中文插入异常 2.原因:此 utf8 非彼 utf8 3.解决 ...
- android之location03
private class ButtonListener implements OnClickListener { @Override public void onClick(View v) { // ...
- 如何让python程序运行得更快
原则1:不优化 原则2:不要优化那些不重要的部分(否则会降低可读性) 解决方案: 1. 使用函数,局部变量比全局变量快很多.尽量使用函数,如main() 2. 有选择性的消除属性访问. 如多用 fro ...
- 在存储过程中执行3种oracle循环语句
create or replace procedure pr_zhaozhenlong_loop /* 名称:在存储过程中执行3种循环语句 功能:利用循环给表中插入数据 调用: begin -- Ca ...
- loadrunner破解
如果报的violation的错误,就下载hp.lr即deletelicense.exe软件运行即可以清楚注册表,然后再用管理员运行loadrunner再注册就可以了.