用ActionManager::playActionByName播放ui编辑器里做的动画,每播一次,创建的CCAction对象都没有销毁。
直接用samples/testcpp里的LoadSceneEdtiorFileTest就可以重现。
泄漏问题是比较严重的问题,望版主提交开发人员尽早解决~
注:因为我在左下角的状态信息里增加了当前action数量的显示,所以很直观的发现了这个bug,否则还真是不容易察觉。
刚刚验证了一下,截止
commit 599903885fb76127f8c61cadb22abf7ea2bebed1
Merge: 1229954 2a54534
Author: minggo ming@cocos2d-x.org
Date: Thu Sep 18 09:22:44 2014 +0800
Merge pull request #8094 from slackmoehrle/patch-2
Update README.md
的v3也有这个问题噢。
对指标数据有洁癖,等不及了,自己找到改了。发出来供参考:
CCActionNode.cpp 66行前面加一句:
CC_SAFE_RELEASE_NULL(m_actionSpawn);
原因是466行处
CC_SAFE_RETAIN(m_actionSpawn);
对m_actionSpawn加了一次引用
但483行
m_action = CCSequence::create(m_actionSpawn,NULL);
m_action->retain();
又将m_actionSpawn包装于m_action,导致多了一次引用。而原析构函数中未正常释放。
我找到原因了,代码是3.2版本的,问题是出在下面这句
if (_action == nullptr)
{
CC_SAFE_RELEASE_NULL(_actionSpawn);
}
else
{
CC_SAFE_RELEASE_NULL(_action);
}
_action == nullptr表示该动画没有播放过,此时释放正确
_action != nullptr时只释放了_action,没有释放_actionSpawn,而_actionSpawn在生成时被retain了一次,导致泄漏
CC_SAFE_RELEASE_NULL(_action);放到if外面即可。
另外refreshActionProperty方法存在同样的问题,也要改下