關於Cocos的內存管理機制引發一些異常的解決方案
阿新 • • 發佈:2017-11-16
scene bsp 權限 初始 layer 場景 cto 內存 color
錯誤:引發了異常: 讀取訪問權限沖突。 this 是 0xDDDDDDDD。或者hero是 0xDDDDDDDD。hero是在GameController裏創建的對象
這個的意思是this所指向的內存已經釋放了,
GameController* GameController::create(Layer * scene) { GameController * _ins = new GameController(); _ins->initWithScene(scene); _ins->autorelease(); return _ins; }
這是由於這句
_ins->autorelease();
引發的,當沒有任何變量指向它的時候,就會自動釋放
解決方案就是用一個數組去存放這個控制器
在場景類GameScene裏面定義屬性
GameController* ctrl;
Vector<GameController*> gcs;
然後在場景初始化的時候
ctrl = GameController::create(this); gcs.insert(0, ctrl);
這樣就不會自動被釋放掉了,就可以訪問這個控制器在初始化的時候創建的一些對象了,比如主角
//向左移動 void GameController::moveLeft() { hero->setPosition(hero->getPositionX() - 50, hero->getPositionY()); }
關於Cocos的內存管理機制引發一些異常的解決方案