参考以下两篇文章

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内存管理机制的更多相关文章

  1. 2、COCOS2D-X内存管理机制

    在C++中.动态内存分配是一把双刃剑,一方面,直接訪问内存地址提高了应用程序的性能,与使用内存的灵活性.还有一方面.因为程序没有正确地分配与释放造成的比如野指针,反复释放,内存泄漏等问题又严重影响着应 ...

  2. 【转】cocos2dx 内存管理机制

    原文地址: http://www.zaojiahua.com/memory-management.html cocos2dx采用的是在堆上分配内存空间,想想看你在写程序的时候对于cocos2dx中的类 ...

  3. cocos2dx 内存管理机制

    持续更新吧. 刚开始看了一些. 一,CCObject  提供引用计数 1,unsinged int m_uReference; //此为CCOBject的引用计数,初始化为 1: new CCObje ...

  4. cocos2d-x内存管理

    Cocos2d-x内存管理 老师让我给班上同学讲讲cocos2d-x的内存管理,时间也不多,于是看了看源码,写了个提纲和大概思想 一.   为什么需要内存管理 1. new和delete 2. 堆上申 ...

  5. 【Cocos2d-x 3.x】内存管理机制与源码分析

    侯捷先生说过这么一句话 :  源码之前,了无秘密. 要了解Cocos2d-x的内存管理机制,就得阅读源码. 接触Cocos2d-x时, Cocos2d-x的最新版本已经到了3.2的时代,在学习Coco ...

  6. cocos2dx的内存管理机制

    首先我们必须说一下c++中变量的内存空间的分配问题,我们在c++中写一个类,可以在栈上分配内存空间也可以使用new在堆上分配内存空间,如果类对象是在栈上分配的内存空间,这个内存空间的管理就不是我们的事 ...

  7. Cocos2d-x 3.1 内存管理机制

    Cocos2d-x使用的内存管理方式是引用计数.引用计数是一种非常有效的机制.通过给每个对象维护一个引用计数器,记录该对象当前被引用的次数.当对象添加一次引用时,计数器加1:而对象失去一次引用时.计数 ...

  8. cocos2d-x 3.0 内存管理机制

    ***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...

  9. cocos2d-x内存管理(见解)

    cocos2d-x 延续了cocos2d 和OC的引用计数的内存管理机制! 下面我们来看看CCDriectro类 CCPoolManager::sharedPoolManager()->push ...

随机推荐

  1. C#——文件上传(一般处理程序ashx)

    Framework版本:.Net Framework 4 1.FileInfo实体 using System; using System.Collections.Generic; using Syst ...

  2. IDEA,与gradle引入jar包报错

    Warning:<i><b>root project 'netty_lecture': Unable to resolve additional project configu ...

  3. Hash课堂测试补写

    Hash课堂测试补写 测试要求: 利用除留余数法为下列关键字集合的存储设计hash函数,并画出分别用开放寻址法和拉链法解决冲突得到的空间存储状态(散列因子取0.75) 关键字集合:85,75,57,6 ...

  4. IMX6Q GPIO定义

    ret = gpio_request_array(mx6q_sabresd_flexcan_gpios,                        ARRAY_SIZE(mx6q_sabresd_ ...

  5. Ubuntu16.04 安装JDK Tomcat

    Ubuntu16.04安装jdk,下载linux中的64版本 需要下载jdk,tomcat安装包 tar.gz版本的 http://pan.baidu.com/s/1mi4WVhA 安装JDK: ho ...

  6. Nginx + LUA下流量拦截算法

    前言 每逢大促必压测,每逢大促必限流,这估计是电商人的常态.每次大促期间,业务流量是平时的几倍十几倍,大促期间大部分业务都会集中在购物车结算,必须限流,才能保证系统不宕机. 限流算法 限流算法一般有三 ...

  7. java 生成验证Guid码

  8. angular项目一

    1.Angularjs第三方模块angular-route和angular-ui-router的区别.差异.不同, ui-router路由器是一个第三方模块,功能非常强大.它支持一切正常ngroute ...

  9. 在x86为arm 编译 httpd 2.2.31

    这个版本的httpd 已经自带 apr apr-util pcre , 不用额外下载源代码 1) 编写环境变量脚本,并执行 cross-env.sh : export ARMROOTFS=/h1roo ...

  10. python实现本地批量ping多个IP

    本文主要利用python的相关模块进行批量ping ,测试IP连通性. 下面看具体代码(python3): #!/usr/bin/env python#-*-coding:utf-8-*- impor ...