在Swift中同步变量

时间:2015-05-22 05:04:24

标签: ios swift sprite-kit synchronization atomic

我有一个爆炸盒子的连锁反应,我想让周围的环境不会下降,直到反应结束,所以我有一个变量,每当一个盒子开始爆炸时会增加,当它完成时会减少爆炸。它适用于小反应,但大型反应永远不会将计数器返回0,这使我怀疑同步问题。然而,我尝试同步它没有做任何事情。我做错了什么?

全球锁定方法:

func lock(handle: AnyObject, body : () -> ()) {
    objc_sync_enter(handle)
    body()
    objc_sync_exit(handle)
}

爆炸的本地方法:

func explode(x: Int) {
    currently_exploding++
        switch type {
        case 0:
            self.runAction(self.die, completion: { () -> Void in
                lock(currently_exploding) {
                    currently_exploding--
                }
            })
            break;
        case 1:
            self.runAction(self.die, completion: { () -> Void in
                lock(currently_exploding) {
                    let i = self.i
                    let j = self.j
                    if j < 9 {
                        board[i][j+1]?.explode(x+1)
                    }
                    if i < 4 {
                        board[i+1][j]?.explode(x+1)
                    }
                    if j > 0 {
                        board[i][j-1]?.explode(x+1)
                    }
                    if i > 0 {
                        board[i-1][j]?.explode(x+1)
                    }
                    currently_exploding--
                }
            })
            break;
        default:
            println("got to default")
            break;
        }
}

通过在其中一个方框上调用explode(1)开始反应。 x的值只是跟踪链的深度,与我试图同步的变量无关。

0 个答案:

没有答案