在NSThread上花了一些时间后,iOS7 SpriteKit崩溃了

时间:2014-04-27 18:15:14

标签: ios sprite-kit exc-bad-access nsthread sknode

我目前正在与一个或多个AI玩家一起编写一个回合制的SpriteKit游戏。每个AI一次轮到一个,并使用共享的solutionFinder实例找到自己的解决方案,但在分离的线程中执行此操作,因为它有时需要几秒钟......

[NSThread detachNewThreadSelector:@selector(findSolution:)
    toTarget:self.scene.solutionFinder 
    withObject:self];

...其中self是当前的AI播放器,scene是父SKScene,其中包含{AI}玩家作为孩子的SKNode。当线程只运行几毫秒时,一切都很好,但是当线程运行几秒钟时,很少我在SKScene的{​​{1}中得到一个EXC_BAD_ACCESS异常方法。

我添加了一些引发异常的NSLog,它解除引用包含问题的AI播放器的-(void)update:(CFTimeInterval)currentTime。但是,记录指针所指向的地址表明它不会从对有效访问的有效访问中更改 - 分离的线程是否可能在线程完成时错误地释放SKNode,或者是否出现其他问题?

NSThread调用的方法包含在SKNode

1 个答案:

答案 0 :(得分:0)

因此,在尝试了大量的东西,包括malloc gaurds,NSZombie,@ autorelease,GCD,performSelectorInBackground和其他零碎之后,我偶尔会遇到崩溃。

虽然现在已经修好了!在修复之前,包含所有玩家的SKNode作为属性公开并通过需要访问的代码传递,我认为这是问题,因为SpriteKit会不时地从我的脚下扫除事物。现在,需要在类之间共享的任何对象都是通过我自己管理的NSArray共享的,经过数小时的压力测试后问题似乎已经消失了。