我怎样才能一次执行上述所有操作以提高速度。
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
}
}