Выпущен массив EXC_ACCESS_ERROR и Cocos2D - PullRequest
0 голосов
/ 20 февраля 2012

Я недавно опубликовал вопрос здесь о некоторых проблемах с памятью, которые у меня были.Благодаря этому замечательному сообществу у меня все исправлено, но я столкнулся с другой проблемой.Я использую Cocos2d для разработки игры и пытаюсь удалить Sprite и массив.Проблема возникает, когда я пытаюсь освободить временный массив, который я использую для отслеживания удаляемых спрайтов.

    NSMutableArray *spritesToRemove = [[NSMutableArray alloc] init];

    // Loop through all sprites
    for(CSSprite *sprite in _sprites){
        if(sprite.toRemove){
            [spritesToRemove addObject: sprite];
        }
    }

    // loop through sprites to be removed
    for(CSSprite *removeableSprite in spritesToRemove){

        [_sprites removeObject: removeableSprite];

        // Cocos2d code to remove a sprite
        [self removeChild: removeableSprite cleanup: YES]; 
    }

    [spritesToRemove release]; // EXC_BAD_ACCESS error 

У меня возникает ощущение, что я получаю ошибку, потому что я освобождаю объект спрайта в [self removeChild: removeableSprite cleanup: YES]; перед тем, как на самом деле освободить массив.Все работает нормально, если убрать строку [spritesToRemove release], но у меня, очевидно, возникает утечка памяти.

Я попытался переместить удаление спрайтов, и я могу отсортировать память, полностью пропустив строку [self removeChild: removeableSprite cleanup: YES];, но затем Cocos2d выдает такую ​​же ошибку EXC_BAD_ACCESS из CCNode в [child visit]; из -(void) visit

Еще раз спасибо за вашу помощь: -)

РЕДАКТИРОВАТЬ: Я включил NSZombie, и я получил это сообщение:

*** -[Sprite release]: message sent to deallocated instance 0xfa94cf0

Что, как мне кажется, наводит на мысль о первоначальной мысли, где-то скоро появится запись в массиве.Это было бы правильно?Если да, то есть ли мне вообще узнать, где?

1 Ответ

0 голосов
/ 20 февраля 2012

Мне удалось найти проблему (и, честно говоря, я чувствую себя немного глупо :-P).Я выпускал спрайт вручную, как только добавил его в массив, которого не было в предоставленном коде, поэтому вы, ребята, не могли его найти.Спрайт уже был настроен для автоматического освобождения и, таким образом, дважды очищался, что приводило к моей ошибке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...