ios - Dealloc 导致在 Cocos2D 场景之间切换时发生崩溃

标签 ios objective-c cocos2d-iphone exc-bad-access

我正在构建一个 Cocos2D 游戏,在其中两个特定的 Sprite 发生碰撞后(通过简单的边界框技术),我调用

[[CCDirector sharedDirector] replaceScene:gameOverScene];

切换到游戏结束场景。

一旦它用其中的所有内容初始化游戏结束场景,游戏就会崩溃并转到 ccArray.m 中的这个方法。类:

void ccArrayRemoveAllObjects(ccArray *arr) { while( arr->num > 0 ) CC_ARC_RELEASE(arr->arr[--arr->num]); }

消息: 线程 1:程序收到信号:“EXC_BAD_ACCESS”。

我尝试使用断点进行调试并发现一旦我的 gameOver 场景被初始化并准备好显示,dealloc上一个类(称为替换场景的游戏类)中的方法被调用,然后抛出此错误。

我的 update方法:

-(void)update:(ccTime)dt {

if (CGRectIntersectsRect(plane.boundingBox, enemy.boundingBox)) {<br/> CCScene *gameOverScene = [GameOverLayer sceneWithWon:NO]; [[CCDirector sharedDirector] replaceScene:gameOverScene]; } }

我的 dealloc方法:

- (void) dealloc {

[super dealloc];

[_monsters release];
_monsters = nil;
[mole release];
mole = nil;
[text release];
text = nil;
[mBG1 release];
mBG1 = nil;
[mBG2 release];
mBG2 = nil; }

我不知道为什么会这样。请帮忙。

谢谢你的期待。

最佳答案

在解除分配游戏场景之前,您正在调用 super 的 dealloc。 在你的 dealloc 方法结束时调用 super 的 dealloc :

- (void) dealloc {   
   [_monsters release];
   _monsters = nil;
   [mole release];
   mole = nil;
   [text release];
   text = nil;
   [mBG1 release];
   mBG1 = nil;
   [mBG2 release];
   mBG2 = nil; 

   [super dealloc];
}

当您首先调用 super 的 dealloc 时,您将释放您的实例,使其成员无效,因此在 dealloc 之后访问它们将产生内存错误访问问题

关于ios - Dealloc 导致在 Cocos2D 场景之间切换时发生崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18299083/

相关文章:

ios - 2.16 : Multitasking apps may only use background services for their intended purposes: VoIP etc

ios - 如果应用程序已经运行,如何处理推送通知?

iphone - 更改使用 loadNibNamed 实例化的类

ios - Cocos2d V3 iOS - 如何从 App Delegate 访问 runningScene

iphone - ios7 中的 Tesseract 集成

iphone - Xcode 失败并出现 "Code Signing"错误

objective-c - 如何使用 iOS 5 中的 Twitter 框架获取用户的 Twitter 个人资料信息?

ios - 如果在数组中找不到任何内容,为什么此循环会导致崩溃

iphone - 当我转换为视网膜显示时,瓦片 map 的位置错误

iphone - 无法在 cocos2d 中使用导入的类方法