1. 程式人生 > >關於Cocos的內存管理機制引發一些異常的解決方案

關於Cocos的內存管理機制引發一些異常的解決方案

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的內存管理機制引發一些異常的解決方案