3

我对DispatchQueue事物不是很老(包括 DispatchGroups、Qos 等)。我现在有一个担忧。就像,我有一个 ViewController 可用于 Android 的 ViewPager UI。在那个 VC 中,我有一个 TableView 每次更改 ViewPager 中的“页面”时都会重新加载。我favourite button在 TableView 单元格中有一个属性。当用户点击该按钮时,它会存储后调用 ( JSON )所需的信息。我想在viewWillDisappear运行时拨打电话。在那里,我想为每个“页面”创建后台线程并捕获已经创建的线程,以防用户点击一个“页面”,由于任何原因,post 调用无法达到高潮。这是我在课堂上的内容:

var workItem1: DispatchWorkItem!
var dispatch1: DispatchQueue!

override func viewWillDisappear(_ animated: Bool) {
     super.viewWillDisappear(animated)
}

我应该怎么做才能实现我的目标?

4

1 回答 1

2

理论上,您可以根据需要创建任意数量的队列。您还可以在串行队列(任务一个接一个地处理)或并发队列(任务同时处理)之间进行选择

let concurrentQueue = DispatchQueue(label: "my_queue_1", attributes: .concurrent)
concurrentQueue.sync {
    //do your thing
}  

但是:为每个呼叫创建一个队列是不好的做法。那不是队列的用途。您应该做的是使用并发队列,其中每个任务都代表一个 POST 调用。

或者更好的是,您应该问自己是否不能一次性将用户收藏的所有页面的数组提交到服务器。这将在一定程度上消除对队列的需要。

于 2018-07-11T13:57:46.617 回答