我目前正在编写一个包含一个或多个 AI 玩家的回合制 SpriteKit 游戏。每个 AI 一次轮到一个,并使用共享实例找到自己的解决方案solutionFinder
,但在分离线程中执行此操作,因为有时需要几秒钟......
[NSThread detachNewThreadSelector:@selector(findSolution:)
toTarget:self.scene.solutionFinder
withObject:self];
...whereself
是当前 AI 玩家,并且scene
是 parent SKScene
,其中包含一个SKNode
以 AI 玩家为孩子的。当线程只运行几毫秒时,一切都很好,但是当线程运行几秒钟时,我很少SKScene
在's-(void)update:(CFTimeInterval)currentTime
方法中得到 EXC_BAD_ACCESS 异常。
我添加了一些引发异常的 NSLog,它正在取消引用SKNode
包含问题的 AI 播放器的 NSLog。但是,记录指针指向的地址表明它不会从有效访问变为无效访问 - 分离线程是否可能在线程完成时错误地释放 SKNode,或者是否有其他问题?
NSThread 调用的方法被包裹在一个@autorelease
.