保留关闭期间的保留周期

时间:2017-02-03 16:41:27

标签: swift memory-leaks sprite-kit core-motion retain

我怀疑我在GameScene课程中使用以下函数来管理加速度计的输入,这样我就可以在转换到另一个场景时保持场景不被初始化:

class GameScene: SKScene {
    let motionManager = CMMotionManager()
    var xAcceleration = CGFloat(0)
    // Some stuff
    // override func didMove(to: ....

    func setupCoreMotion() {
        motionManager.accelerometerUpdateInterval = 0.2
        let queue = OperationQueue()
        motionManager.startAccelerometerUpdates(to: queue,
                                                withHandler:
            {
                accelerometerData, error in
                guard let accelerometerData = accelerometerData else {
                    return
                }
                let acceleration = accelerometerData.acceleration
                self.xAcceleration = (CGFloat(acceleration.x) * 0.75) +
                    (self.xAcceleration * 0.25)
        })
    }
}

这可能是因为自我捕获,但如果是这种情况,我不知道将“[无主自我]放入”捕获列表的位置。

1 个答案:

答案 0 :(得分:2)

你应该像accelerometerData, error in

那样把它放在[unowned self] accelerometerData, error in之前