王哲你好,我有个技术问题请教你:
cocosbuilder内存泄露,reader代码中存在互相引用导致内存无法释放
CCNode * CCBReader::readNodeGraph(CCNode * pParent) 中有这样的代码
// Set root node
if (! mActionManager->getRootNode())
{
mActionManager->setRootNode(node);
}
其中 mActionManager->setRootNode(node);
CCNode* CCBReader::readNodeGraphFromData(CCData pData, CCObject pOwner, const CCSize &parentSize)中有这样的代码
CCNode pNode = (CCNode)pElement->getIntKey();
CCBAnimationManager* manager = (CCBAnimationManager*)animationManagers-
objectForKey((intptr_t)pNode);
pNode->setUserObject(manager);
其中 pNode->setUserObject(manager)
注意:
mActionManager->setRootNode(node);
与
pNode->setUserObject(manager)
中
node与pNode地址相同
mActionManager与manager地址相同
也就是说二者互相引用了。
结果导致二者都无法释放
以上是根据自带例子TestsCpp调试结果。虽然通过其他加载方式避开了这个问题,还请确认下是否存在这个问题,如果存在该如何解决呢?感谢
