不是因为cocos2d-x引用计数设计的有问题,而是因为cocos2d-x的autorelease机制和cocoa的NSAutorelease有很大区别,没搞清楚就会出现疑问。 cocos2d-x里,所有autorelease的对象只能在一个event loop里保持有效,也就是一次渲染frame,当每帧渲染结束时,pool manager会对他管理的每个autorelease的对象做一次release()调用,cocos2d-x里的代码很明确:

void CCDisplayLinkDirector::mainLoop(void)
{
    ...
         // release the objects
         CCPoolManager::sharedPoolManager()->pop();
     ...
}

void CCPoolManager::pop()
{
    ...
    m_pCurReleasePool->clear();
    ...
}

所以,如果要想让生成的CCArray长久有效,就得调一次retain操作,在不需要的时候调release。

初始化

CCArray *tmpArray = CCArray::array();
tmpArray->retain();

增加元素

tmpArray>addObject(元素);

删除

tmpArray->removeAllObjects();
tmpArray->release();

附官方对此的解释



blog comments powered by Disqus

Published

06 November 2013