最近,我发布了一个关于一些内存问题的here问题。多亏了这个美妙的社区,我现在已经解决了这个问题,但我面临着另一个问题。我正在使用Cocos2d开发一个游戏,并试图从和数组中删除雪碧。当我试图释放用于跟踪要删除的精灵的临时数组时,就会出现问题。
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];中释放sprite对象。如果我删除行[spritesToRemove release],这一切都很好,但很明显,我手上有一个内存泄漏。
我已经尝试移动移除精灵,我可以通过完全省略行[self removeChild: removeableSprite cleanup: YES];来排序内存问题,但是Cocos2d在[child visit]; of -(void) visit的CCNode中抛出了相同的EXC_BAD_ACCESS错误
再次感谢你的帮助:-)
编辑:,我启用了NSZombie,收到了以下消息:
*** -[Sprite release]: message sent to deallocated instance 0xfa94cf0
对我来说,这暗示了我最初的想法,数组中的一个条目很快就会被释放。那是对的吗?如果是的话,我还能查到在哪里吗?
发布于 2012-02-20 14:09:29
我设法找到了这个问题(老实说,我觉得有点傻:-P )。当我将它添加到数组中时,我正在手动释放它,因为它不在提供的代码中,所以你们不可能找到它。精灵已经被设置为自动释放,因此被清除了两次--导致了我的错误。
https://stackoverflow.com/questions/9355040
复制相似问题