这段代码为什么给EXC_BAD_ACCESS?
问题描述:
我正在为iPhone上的Cocos2d游戏工作。这段代码为什么给EXC_BAD_ACCESS?
以我init方法我有一个对象(类型ID)声明如下(也note注意bossDir被声明为1):在一计时器方法
bossMov = [CCMoveTo actionWithDuration:1.0f position:ccp(75*bossDir, 320-55)];
[boss runAction:bossMov];
然后,我有:
if ([bossMov isDone] == YES) {
bossDir = -bossDir;
[boss stopAllActions];
[boss runAction:bossMov];
}
它移动的老板一次,但之后它给EXC_BAD_ACCESS,并指出我的文件“CCTimer.m”这样一行:
if(elapsed >= interval) {
impMethod(target, selector, elapsed); //This line in particular.
elapsed = 0;
}
我该如何解决这个问题?
答
您不保留bossMov
操作。所以当你拨打[boss stopAllActions];
它被释放和释放。然后你试图运行释放的动作 - 所以你得到了不好的访问。
答
你有没有尝试NSZombieEnabled,因为我不是一个cocos2d的家伙,但只是作为一个建议,我告诉你这一点。因为访问错误只会在您指向不再存在于内存中的对象时才会出现,并且如果您尝试这样做,应用程序会崩溃
非常感谢这个答案,它真的救了我使用NSZombie!我有一个玩家实例(NSObject),它是一个autorelease对象,因为我假定所有的CCSprite(cocos2d)等都是autorelease,但是我没有想到的是,cocos2d库将所有CCSprites存储在数组中,所以它们被用在某处意味着它们不会被释放,但是我的播放器实例在初始化后立即被释放,然后当我的主定时器被调用时程序会崩溃。然后,我更改了要保留的玩家,并在我的分配中释放它。再次感谢:) – 2012-01-19 13:33:01
很高兴帮助你 – Radix 2012-02-16 06:49:42