初窥Cocos2d-x内存管理机制(2)

来源:互联网 发布:mac 创建.gitignore 编辑:程序博客网 时间:2024/05/01 15:27

Cocos2d-x版本:cocos2d-2.1rc0-x-2.1.3 

windows平台。

VS版本:VS2010.

继上篇,在Cocos2d-x中,当一个节点调用addchild()方法后,其被加载的子节点会调用自身的retain()方法。从源码可以看出。

代码如图():


 其中insertChild()方法代码如图:


函数ccArrayAppendObjectWithResize()代码:


函数ccArrayAppendObject()代码

由此看出,addChild()方法会调用加载子节点的retain()方法。

测试方法如上篇,测试代码如下:

// on "init" you need to initialize your instancebool HelloWorld::init(){    bool bRet = false;    do     {        //////////////////////////////////////////////////////////////////////////        // super init first        //////////////////////////////////////////////////////////////////////////        CC_BREAK_IF(! CCLayer::init());/*省略了很多代码*/CCSprite* fish = CCSprite::create();CCLOG("retainCount after create: %d",fish->retainCount());this->addChild(fish, 0);CCLOG("retainCount after addChild: %d",fish->retainCount());this->setTsprite(fish);        bRet = true;    } while (0);    return bRet;}void HelloWorld::menuCloseCallback(CCObject* pSender){    // "close" menu item clicked    //CCDirector::sharedDirector()->end();CCLOG("retainCount after click button: %d",m_Tsprite->retainCount());}
调试输出日志如图:

此处,计数总结结束。


备用,也希望能帮助到大家。



0 0