国产探花免费观看_亚洲丰满少妇自慰呻吟_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。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 唐河县| 忻州市| 新泰市| 阆中市| 焦作市| 新乡县| 东兴市| 义乌市| 余江县| 双鸭山市| 八宿县| 独山县| 亚东县| 东兰县| 兴仁县| 京山县| 美姑县| 政和县| 西乌| 连州市| 乌兰浩特市| 丹巴县| 玉门市| 育儿| 凤阳县| 旌德县| 海盐县| 谷城县| 石台县| 宜兴市| 株洲市| 苍山县| 建湖县| 镇赉县| 凤城市| 邢台市| 蚌埠市| 车险| 安顺市| 石嘴山市| 宁安市|