cocos2dx内存管理机制
参考以下两篇文章
http://blog.csdn.net/ring0hx/article/details/7946397
http://blog.csdn.net/whuancai/article/details/23347143
cocos2d-x 源码分析 : Ref (CCObject) 源码分析 cocos2d-x内存管理策略
http://www.tuicool.com/articles/YJJfim
#define CREATE_FUNC(__TYPE__)
static __TYPE__* create()
{
__TYPE__ *pRet = new __TYPE__();
if (pRet && pRet->init())
{
pRet->autorelease();
return pRet;
}
else
{
delete pRet;
pRet = NULL;
return NULL;
}
}
作为函数体内变量
1,当使用create方法创建对象的时候 会调用init()和autoRealse(),new 操作符 会调用构造函数,ReferenceCount = 1,然后放到内存回收池的。
2,addChild的时候,ReferenceCount = 2,
3,此帧结束的时候它的引用计数减1,
比如下面代码:Vector<Sprite*> sprArray;
void HelloWorld::update(float time)
{
sprArray.at(0)->setPosition(Vec2(0, 0));
log("referCount:%d", sprArray.at(0)->getReferenceCount());//2
}
void HelloWorld::testAutoRease2()
{
Sprite* bomb1 = Sprite::create("bg.png");//1
Sprite* bomb2 = Sprite::create("bg.png");
Sprite* bomb3 = Sprite::create("bg.png");
this->addChild(bomb1);//2
this->addChild(bomb2);
this->addChild(bomb3);
sprArray.pushBack(bomb1);//3
sprArray.pushBack(bomb2);
sprArray.pushBack(bomb3);
this->scheduleUpdate();
}
对象作为类属性的情况:
1,跟as3不一样,2dx的类对象不会保留对象引用,只能通过retain操作比如下面代码:
create方法引用计数为1,帧结束计数减1,为0,被回收。再调用类方法报错。
void HelloWorld::testPropertyRease()
{
sprOne = Sprite::create("bg.png");
this->schedule(schedule_selector(HelloWorld::updateAfter), 1.0f);
log(" sprOne referCount:%d", sprOne->getReferenceCount());
//sprOne->retain();
}
void HelloWorld::updateAfter(float dt)
{
log(" sprOne referCount:%d %d", sprOne->getReferenceCount(), sprOne->getPositionX());
}
cocos2dx内存管理机制的更多相关文章
- 2、COCOS2D-X内存管理机制
在C++中.动态内存分配是一把双刃剑,一方面,直接訪问内存地址提高了应用程序的性能,与使用内存的灵活性.还有一方面.因为程序没有正确地分配与释放造成的比如野指针,反复释放,内存泄漏等问题又严重影响着应 ...
- 【转】cocos2dx 内存管理机制
原文地址: http://www.zaojiahua.com/memory-management.html cocos2dx采用的是在堆上分配内存空间,想想看你在写程序的时候对于cocos2dx中的类 ...
- cocos2dx 内存管理机制
持续更新吧. 刚开始看了一些. 一,CCObject 提供引用计数 1,unsinged int m_uReference; //此为CCOBject的引用计数,初始化为 1: new CCObje ...
- 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 ...
随机推荐
- Django学习笔记之Ajax与文件上传
Ajax简介 AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”.即使用Javascript语言与服务器进行异步交互,传输 ...
- Windows 2008 系统IIS安装配置
win8下安装IIS 1.右键“我的电脑”,选择“管理”,打开“服务器管理 器, 如下图: 2.点击左边菜单栏中的“角色“,弹出角色窗口,如下图: 3. 点击“添加角色”,弹出“添加角色向导”界面,如 ...
- linux内核分析第六周-分析Linux内核创建一个新进程的过程
Linux内核对进程管理是操作系统的重要任务之一. 此次实验就是了解内核创建一个新进程的大致过程. 为了简单,使用fork再用户态创建一个进程.代码如下: 下面是准备工作 cd LinuxKer ...
- 20145219《网络对抗》PC平台逆向破解
20145219<网络对抗>PC平台逆向破解 shellcode注入 1.shellcode shellcode是一段代码,溢出后,执行这段代码能开启系统shell. 2.构造方法 (1) ...
- git commit时加上Signed-off-by信息
git commit -s -m "descriptions about the code" 只要加入-s参数即可自动加上Signed-off-by信息
- POJ 3169 Layout(差分约束+最短路)题解
题意:有一串数字1~n,按顺序排序,给两种要求,一是给定u,v保证pos[v] - pos[u] <= w:二是给定u,v保证pos[v] - pos[u] >= w.求pos[n] - ...
- CNN中dropout层的理解
dropout是在训练神经网络模型时,样本数据过少,防止过拟合而采用的trick.那它是怎么做到防止过拟合的呢? 首先,想象我们现在只训练一个特定的网络,当迭代次数增多的时候,可能出现网络对训练集拟合 ...
- 一年25个里程碑!免疫疗法“战胜”癌症,靠的是实力(5篇Science、6篇Nature )--转载
近几年,免疫疗法的成功使癌症治疗进入了新的时代.无论是科研界,还是商业界,都丝毫没有掩饰对这一领域的热情.2016年,Cell杂志公布的年度十大最佳论文中,免疫疗法占两席.事实上,这两项成果只是去年癌 ...
- install ros-indigo-ecl-build
-- ==> add_subdirectory(bp_smart_charging/bp_dock_drive) CMake Warning at /opt/ros/indigo/share/c ...
- c++指向指针的指针与 c++指针作为函数参数传递问题
一直搞不明白,c++中指针到底是个啥东西,今天遇到到c++,指向指针的指针的问题,突然有点开窍了. 举个例子: int main(int argc, char** argv){ int a[5]={1 ...