如何在iOS Swift中实现multithreading,并发或并行?

有什么办法可以在Swift中创build一个工作线程?例如,如果有一个主要的function需要大量的计算,并因此导致主线程延迟几秒钟,如果我想将该function移动到单独的线程或不阻塞主线程的线程有没有办法用Swift做到这一点?

我已经浏览了Swift的Apple文档的基本和高级组件,但没有提及并发性或并行性,有谁知道如何做(如果可能)?

或者你也可以使用操作队列。 在Swift 3:

let queue = OperationQueue() queue.addOperation() { // do something in the background OperationQueue.main.addOperation() { // when done, update your UI and/or model on the main queue } } 

无论是这个,还是安迪所说的 GCD,都能正常工作。

有关操作队列和调度队列(也称为Grand Central Dispatch,GCD)的相对优点,请参阅Apple的“ 并发编程指南” 。 尽pipe该指南仍然使用Objective-C展示了这些示例,但API和概念在Swift中基本相同(只是使用Swift语法)。 GCD文档和Xcode中的操作队列描述了Objective-C和Swift API。


顺便说一下,你会注意到在上面的例子和Andy的GCD演示中,我们都使用了“尾随闭包”。 例如,如果查看定义addOperationWithBlock的定义,那么定义为一个参数是“闭包”(与Objective-C中的块类似)的函数:

 func addOperation(_ block: @escaping () -> Swift.Void) 

这可能会导致您假设您将按如下方式调用它:

 queue.addOperation({ // do something in the background }) 

但是当一个函数的最后一个参数是一个闭包时,尾部闭包语法允许你从函数的括号中取出最后的闭包参数,并在函数之后移动它,得到:

 queue.addOperation() { // do something in the background } 

而且由于括号内没有任何内容,您甚至可以更进一步,删除那些空的括号:

 queue.addOperation { // do something in the background } 

希望能够说明如何解释NSOperationQueue / OperationQueue和/或GCD函数声明并在代码中使用它们。

您可以使用Grand Central Dispatch(GCD)执行此类任务。

这是一个基本的例子:

 let backgroundQueue: dispatch_queue_t = dispatch_queue_create("com.a.identifier", DISPATCH_QUEUE_CONCURRENT) // can be called as often as needed dispatch_async(backgroundQueue) { // do calculations } // release queue when you are done with all the work dispatch_release(backgroundQueue)