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 ...
随机推荐
- virtual修饰符
virtual(C# 参考) virtual 关键字用于修饰方法.属性.索引器或事件声明,并使它们可以在派生类中被重写. 例如,此方法可被任何继承它的类重写. public virtual doubl ...
- c# Base64编码和图片的互相转换代码
将图片转化为Base64字符串的流程是:首先使用BinaryFormatter将图片文件序列化为二进制数据,然后使用Convert类的ToBase64String方法.将Base64字符串转换为图片的 ...
- codeforces 258C Little Elephant and LCM 组合数学 枚举
题意: input : n a1,a2,...,an 1 <= n <= 10^5 1 <= ai <= 10^5 求b数组的方案数,b数组满足: 1. 1 <= bi ...
- studio--如何将Eclipse中的项目迁移到Android Studio 中
如果你之前有用Eclipse做过安卓开发,现在想要把Eclipse中的项目导入到Android Studio的环境中,那么首先要做的是生成Build Gradle的文件.因为Android Studi ...
- 优化studio的速度
随着Android Studio开发工具的逐渐成熟,越来越多的程序员选择这种IDE工具来进行开发,但是android studio在使用过程中有时候会出现卡顿问题.在赶项目的时候,遇到这类问题最是苦恼 ...
- 查询oracle中所有用户信息
1.查看所有用户:select * from dba_users; select * from all_users; select * from user_users; 2.查看用户或角色系统 ...
- JAVA算数运算符
算数运算符 序号 算数运算符 含义用法 特殊含义用法 1 + 加法 字符串连接 2 - 减法 3 * 乘法 4 / 除法 5 % 取余 实例: public class Test{ p ...
- Python深入03 对象的属性
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python一切皆对象(object),每个对象都可能有多个属性(attribut ...
- [ActionScript 3.0] AS3中的位图(BitmapData)应用
1.位图使用(模糊)滤镜 //创建一个矩形区域的BitmapData var bmd:BitmapData = new BitmapData(80, 30, false, 0xffffff); //画 ...
- matplotlib python高级绘图库 一周总结
matplotlib python高级绘图库 一周总结 官网 http://matplotlib.org/ 是一个python科学作图库,可以快速的生成很多非常专业的图表. 只要你掌握要领,画图将变得 ...