写得很好,利于理解,尤其是按钮响应事件的例子,sprite要先retain一下,保持计数值,然后在层析构中析构这个sprite。
下一帧的时候就会为0了,你要马上用根据引擎的内存管理机制貌似是不可以的,如果满足不了你的要求,那你就不要用引擎的内存管理机制了呀,自己new吧,然后自己管理内存。
顶顶顶……
DAY DAY UP!
有个疑问:
使用了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也可以??
}
多么好的教程帖 多谢楼主分享宝贵经验 收藏了 


这么好的文章,必须顶~~~~~~
ddddddddddddddddddddddddddddddddddddd
相当不错!
DAY DAY UP!
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,然后在消亡时转移到一个延时队列删除。