在 iOS swift 中异步/并发/平行运行任务



我怎样才能一次执行上述所有操作以提高速度。

self.passingMsgIdsTofetchMsgss(messageIDs : msgIDBatches[0]) 
self.passingMsgIdsTofetchMsgss(messageIDs : msgIDBatches[1]) 
self.passingMsgIdsTofetchMsgss(messageIDs : msgIDBatches[2]) 
self.passingMsgIdsTofetchMsgss(messageIDs : msgIDBatches[3])

你所追求的是 DispatchQueue concurrentExecute 上的类函数

例如:

DispatchQueue.concurrentPerform(iterations: msgIDBatches.count) { (index) in
    self.passingMsgIdsTofetchMsgss(messageIDs : msgIDBatches[index])    
}

如果要更新 UI,显然需要小心回调主队列,并确保passingMsgIdsTofetchMsgss线程安全。使用时间分析器检查一下,这是否是性能瓶颈的实际所在。

另一种选择是 OperationQueue ,您可以将所有提取添加到队列并同时执行它们。

Swift 4.1。首先创建并发队列

private let concurrentPhotoQueue = DispatchQueue(label: "App_Name", attributes: .concurrent)

现在将您的工作分派到并发队列

concurrentPhotoQueue.async(flags: .barrier) { [weak self] in
            // 1
            guard let weakSelf = self else {
                return
            }
            // 2 Perform your task here
            weakSelf.passingMsgIdsTofetchMsgss(messageIDs : msgIDBatches[0])
            weakSelf.passingMsgIdsTofetchMsgss(messageIDs : msgIDBatches[1])
            weakSelf.passingMsgIdsTofetchMsgss(messageIDs : msgIDBatches[2])
            weakSelf.passingMsgIdsTofetchMsgss(messageIDs : msgIDBatches[3])
            // 3
            DispatchQueue.main.async { [weak self] in
                // Update your UI here
            }
        }

相关内容

  • 没有找到相关文章

最新更新