您的位置:首页 > 移动开发 > Cocos引擎

cocos2d-x 在CCSequence中使用CCCallFunc时的release BUG

2011-11-17 17:27 323 查看
猴子原创, 欢迎转载,转载请在明显处注明! 谢谢。

原文地址:http://blog.csdn.net/yanghuiliu/article/details/6951984

项目中以前一直有个BUG,就是就我使用完CCSequence后,在析构里面release掉的时候总会BUG,之前没时间弄,直接注释了。

今天重新又遇到这个问题,在一哥们的帮助下,找到了原因。但是好的解决方暂时没有。

描述下问题,

view plain

mAction= CCSequence::actions(action,
CCCallFunc::actionWithTarget(this,callfunc_selector(MyClass::callBackAction)),NULL);
mAction->retain();

代码某处我创建了一个队列action,当action执行完毕后会回调callBackAction函数。功能很简单。

但是当我在析构里面mAction->release();时就出错了,纠结半天才知道,当我runAction(mAction)结束后,CCCallFunc会autoRelease掉。那么在析构的时候,我执行mAction->release();时,当初创建的CCCallFunc会被再次release,但是这个CCCallFunc在前面已经被autoRelease了。这个时候就会报错。

不过呢,CCSequence里面放的都是action时,就不会出这个问题,但action和CCCallFunc都是继承同一个基类,为什么这个会出问题?还不是很清楚。

也许你还会想到析构的时候使用CC_SAFE_RELEASE(),你能想到这很不错,但是也不能解决上面的问题。

先看看它是实现

view plain

#define CC_SAFE_RELEASE(p) if(p) { p->release(); }

现在知道了吧,他只是判断了传进去的对象是否为空。

OK,就这样吧,记录一笔,午休时间Over,工作中....
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: