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 ...
随机推荐
- Python:数字的格式化输出
>>> 'The value is {:0,.2f}'.format(x) 'The value is 1,234.57' 需要将数字格式化后输出,并控制数字的位数.对齐.千位分隔符 ...
- 【图像处理】计算Haar特征个数
http://blog.csdn.net/xiaowei_cqu/article/details/8216109 Haar特征/矩形特征 Haar特征本身并不复杂,就是用图中黑色矩形所有像素值的和减去 ...
- Linux内核分析 05
扒开系统调用的三层皮(下) 一,给MenuOS增加time和time-asm命令 把time和time-asm添加到MenuOS里面去 作为命令.扩展MenuOS的功能.本周把上周增加的系统调用添加进 ...
- linux内核分析第八周-理解进程调度时机跟踪分析进程调度与进程切换的过程
实验原理: 一.调度时机 不同类型的进程有不同的调度需求 第一种分类: I/O-bound 频繁的进行I/O 通常会花费很多时间等待I/O操 ...
- ubuntu16.04+七彩虹GTX1060的NVIDIA驱动+Cuda8.0+cudnn5.1+tensorflow+keras搭建深度学习环境【学习笔记】【原创】
平台信息:PC:ubuntu16.04.i5.七彩虹GTX1060显卡 作者:庄泽彬(欢迎转载,请注明作者) 说明:参考了网上的一堆的资料搭建了深度学习的开发环境,下班在宿舍折腾了好几个晚上才搞定,写 ...
- LightOJ 1071 Baker Vai(拆点+最大费用流)题解
题意:给一个n*m的方格,每个格子上都有一个数字表示价值,小A在左上角,他从左上角走到右下角只能向右或向下走,然后再从右下角走上左上角,这次只能向上或向左走,这两条路绝对没有重复,问你怎样走有最大价值 ...
- asp.net web api的源码
从安装的NuGet packages逆向找回去 <package id="Microsoft.AspNet.WebApi.Core" version="5.2.7& ...
- 2016"百度之星" - 初赛(Astar Round2A) A.All X 矩阵快速幂
All X Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem Des ...
- php 添加时间戳
<?php $tomorrow = mktime(,,,date(,date("Y")); echo "Tomorrow is ".date(" ...
- ContentNegotiatingViewResolver多种输出格式实例: json/jsp/xml/xls/pdf
ContentNegotiatingViewResolver多种输出格式实例: json/jsp/xml/xls/pdf 本例用的是javaConfig配置 以pizza为例. json输出需要用到的 ...