cocos2dx的内存管理机制

写得很好,利于理解,尤其是按钮响应事件的例子,sprite要先retain一下,保持计数值,然后在层析构中析构这个sprite。

下一帧的时候就会为0了,你要马上用根据引擎的内存管理机制貌似是不可以的,如果满足不了你的要求,那你就不要用引擎的内存管理机制了呀,自己new吧,然后自己管理内存。

顶顶顶……

DAY DAY UP!:2:

有个疑问:
使用了autorelease()会在每一帧后引用减1,那要一帧一帧一直执行下去,是否每一帧开始时要引用加1,那在哪里进行引用加1操作?

你可以这么理解:autorelease()一帧过后就会清除掉。
不过我一直很奇怪什么叫一帧啊。。难道仅仅指的是游戏主循环的帧么。?

支持,这对新手相当有用

mark一下,以后在看

写得不错, 支持一下楼主。
有个地方还想请教一下。
我在构造函数中,用类工厂的模式创建了ParticleBatchNode对像。并在init把他addChild了。但这个对像还是需要自己去retain的。
按楼主分析不是addChild后,就不用自己retain了吗?
如下代码:
Role::Role() //构造函数
{
particleBatchNode = ParticleBatchNode::create(“Flower.png”);

CC_SAFE_RETAIN(particleBatchNode);  //particleBatchNode->retain();

}

Role::Init()
{

getGameMap()->addChild(particleBatchNode, 1);
}

Role::~Role() //析构
{
CC_SAFE_RELEASE_NULL(particleBatchNode); //particleBatchNode->release(); //这里好像不release也可以??
}

多么好的教程帖 多谢楼主分享宝贵经验 收藏了 :2::2::2:

这么好的文章,必须顶~~~~~~

ddddddddddddddddddddddddddddddddddddd

相当不错!
DAY DAY UP!:2:

it’s very nice of ,thank you for your sharing

抽空得好好看看

新的一天,每天都要努力啊

写的很详细 ,不错!!!!顶一个!

结合源代码和楼主的讲解瞬间理解了不少,感谢。

楼主,我有一点没有看明白,你说调用autorelease时就将对象放到自动回收池,这样每一帧的时候会调用里面的release方法,但是下一帧的时候又重新创建了一个回收池,那么之前回收池内的对象怎么办?还有每一帧调用release不是会导致引用计数一直减么

辛苦兄弟做了那么多试验,其实看看cocos2d-x源码就知道了,所有Ref子类都是必须要有parent node。否则会在下一个检测循环被析构掉。 这个听上去貌似没有问题,但cocos2d-x 3.x修改了事件派发机制,改成异步多线程通知,这样很容易在某个对象刚被remove child,可能某个事件监听(例如触摸、物理碰撞)回调中还有这个对象的引用,访问时就会造成崩溃。如果给多线程加锁,那么又达不到原有提升效率的初衷。 实际上这个能看出来底cocos2d-x层团队不理解也不会运用smart_ptr机制,我目前项目中的方法所有主动消亡类Sprite/Node,都强制取消autorelease,然后在消亡时转移到一个延时队列删除。