我有一个使用cocos2d v1.1.0-beta2b的ios应用程序,遇到了一个非常奇怪的情况,发射器'自动删除。
我的问题是:
无限期持续时间CCParticleSystemQuad ,其中 autoRemoveOnFinished 设置为 YES ,在我打电话给 stopSystem ?
之前删除了以下是一些其他信息:
我按如下方式初始化发射器:
NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path];
emitter = [[[CCParticleSystemQuad alloc]
initWithDictionary:dict] autorelease];
emitter.duration = -1.0f;
[emitter setAutoRemoveOnFinish:YES];
[self addChild:emitter z:10];
然后,它当然是作为一个孩子添加,一切都很完美。 正如许多地方所建议的,为了删除它,我打电话:
[emitter stopSystem];
之后,当所有粒子消失后,发射器将按预期移除。
到目前为止一切都很好。
但是,我遇到了几个崩溃报告,表明发射器过早释放,然后我的应用程序在stopSystem线上崩溃(因为发射器已经释放)。 我得到了一些反馈,表明在发射器活动期间设备被锁定/解锁时有时会发生这种情况,但对我而言,这种情况很有效,而这些崩溃很少见。 我还没有能够重现它发生的情况,所以我再次问你们:
无限期持续时间CCParticleSystemQuad ,其中 autoRemoveOnFinished 设置为 YES ,在我打电话给 stopSystem ?
之前删除了答案 0 :(得分:-1)
看起来你有僵尸感染。
Zombie是由悬空指针引起的:它指向的对象已经被释放,但是指针继续指向该位置。当您尝试调用该对象的任何方法时,都会崩溃。
emitter = [[[CCParticleSystemQuad alloc]
initWithDictionary:dict] autorelease];
您的emitter
指向自动释放的对象。看起来它“继续”存在而自动释放池没有被耗尽;
有时会在发射器活动期间锁定/解锁设备时发生
这听起来像锁定/解锁触发自动释放池耗尽,而你的emitter
变成了僵尸。
您可以使用NSZombieEnabled进行调试。使用NSZombieEnabled对象时,不应立即取消分配,而是转换为NSZombie对象。任何调用NSZombie方法的尝试都会在控制台中给你一条消息:“消息发送到解除分配的实例”。