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

猴子原创, 欢迎转载,转载请在明显处注明! 谢谢。

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


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

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

描述下问题,

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(),你能想到这很不错,但是也不能解决上面的问题。

先看看它是实现

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

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


OK,就这样吧,记录一笔,午休时间Over,工作中....




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值