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

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

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

2019-11-09 16:43:24
字體:
來源:轉載
供稿:網友

關于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。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南漳县| 杭锦后旗| 三江| 柘荣县| 红安县| 灵山县| 宝应县| 石嘴山市| 阳东县| 永德县| 镇原县| 山丹县| 铜川市| 临洮县| 黄浦区| 盐津县| 盖州市| 资阳市| 岗巴县| 义乌市| 财经| 丽水市| 邵武市| 玉溪市| 泰和县| 淳化县| 稻城县| 宁阳县| 洪湖市| 呼玛县| 西丰县| 孝义市| 锡林浩特市| 柳林县| 法库县| 嵊州市| 霍城县| 隆化县| 顺昌县| 闵行区| 宾阳县|