国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

關于cocos2dx內存管理機制的記錄

2019-11-09 15:30:32
字體:
來源:轉載
供稿:網友

關于cocos2dx內存管理的記錄。

//創建一個精靈 auto sPRite = Sprite::create("HelloWorld.png"); //此時的引用計數為1 // position the sprite on the center of the screen sprite->setPosition(Vec2(visibleSize / 2) + origin); sprite->setTag(123); // add the sprite as a child to this layer this->addChild(sprite); //addchild 以后此時的引用計數為2 //三幀以后釋放精靈 this->scheduleOnce([this](float dt) { //釋放前,引用計數變成了1 /* 為什么變成了1,明明創建的時候是2. 這個問題,我糾結了一天。后來,明白了。 */ this->removeChildByTag(123); //釋放后,引用計數,就沒了。 }, 3,"update");

為什么變成了1呢?

void Director::mainLoop(){ if (_purgeDirectorInNextLoop) { _purgeDirectorInNextLoop = false; purgeDirector(); } else if (_restartDirectorInNextLoop) { _restartDirectorInNextLoop = false; restartDirector(); } else if (! _invalid) { drawScene(); // release the objects //這里在每一幀的末尾會clear 繼續點開。 PoolManager::getInstance()->getCurrentPool()->clear(); }}void AutoreleasePool::clear(){#if defined(COCOS2D_DEBUG) && (COCOS2D_DEBUG > 0) _isClearing = true;#endif std::vector<Ref*> releasings; //清空自動回收池 releasings.swap(_managedObjectArray); for (const auto &obj : releasings) { //這里進行了釋放過程,也就是引用計數減1 obj->release(); }#if defined(COCOS2D_DEBUG) && (COCOS2D_DEBUG > 0) _isClearing = false;#endif}

這一幀已經清空了自動回收池,下一幀就不會 再for循環了。所以精靈的引用計數,一直保持1,直到調用remove,remove里面有release 又會減1,就會被釋放。

小插曲: cocos2dx 所有的自動回收必須依托ref進行。 ccnode 就是一個節點。addchild就是往這個節點上添加子節點,如果ccnode被釋放,則子節點也會被釋放。 所以 virtual ~Node(); 析構函數,要加virtual。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 钟祥市| 夏津县| 邵阳市| 万年县| 鹤壁市| 洪雅县| 西乌珠穆沁旗| 嫩江县| 黄大仙区| 许昌市| 灵武市| 乌恰县| 黔南| 秀山| 开原市| 广饶县| 黑龙江省| 集贤县| 息烽县| 红安县| 东乌珠穆沁旗| 平阴县| 彝良县| 宿迁市| 方城县| 临邑县| 湖州市| 竹溪县| 巴中市| 巴塘县| 罗城| 什邡市| 澄江县| 民乐县| 武隆县| 惠水县| 长春市| 苗栗市| 崇左市| 鄂伦春自治旗| 华亭县|