Swift串行队列在运行时死亡

时间:2018-12-19 15:08:43

标签: ios swift grand-central-dispatch

在我的应用程序中,我有很多数学任务。如果我在主队列中运行此任务,则每次调用任务后我都会冻结几秒钟的屏幕,但它可以正常工作。如果我在其他队列中运行任务-从一些随机迭代中它什么也没做。如果我在主队列中运行代码,则在每次迭代中都会收到调试消息,在其他队列中-随机迭代之后我什么也没有。看起来,队列死于某种原因。 CPU和内存的使用率没有变化,并保持在50-70%的水平。我想到了无限循环,死锁或类似功能,但是在主队列中它总是可以正常工作。怎么了?

class MyClass {
let serialQueue = DispatchQueue(
    label: "com.notrealcompany.hardMathematics", 
    qos: .userInteractive
)

func doStuff() {
    serialQueue.async {
        node.getArea()
        debugPrint("get area call")
    }
}

serialQueue是一个实例变量,但情况没有改变。

1 个答案:

答案 0 :(得分:1)

当代码中的方法返回时,听起来serialQueue正在被释放。尝试将serialQueue的声明移到实例变量而不是局部变量。

class MyClass {
    let serialQueue = DispatchQueue(
        label: "com.notrealcompany.hardMathematics", 
        qos: .userInteractive
    )

    func doStuff() {
        serialQueue.async {
            node.getArea()
            debugPrint("get area call")
        }
    }
}