Я недавно опубликовал вопрос здесь о некоторых проблемах с памятью, которые у меня были.Благодаря этому замечательному сообществу у меня все исправлено, но я столкнулся с другой проблемой.Я использую 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
Что, как мне кажется, наводит на мысль о первоначальной мысли, где-то скоро появится запись в массиве.Это было бы правильно?Если да, то есть ли мне вообще узнать, где?