NSOperationQueue没有完成操作?

时间:2016-08-21 18:56:18

标签: swift multithreading

我最近开始在Swift中学习多线程,我想使用NSOperationQueueNSOperation类尝试一些基本的多线程。

在.swift文件的全局范围内(在Xcode中的命令行工具项目中),我定义了这两个函数:

func foo() { /* prints from 1 to 26 */ }
func bar() { /* prints from a to z */ }

然后我实例化了一个NSOperationQueue并执行了以下操作:

let queue = NSOperationQueue()
queue.addOperationWithBlock(foo)
queue.addOperationWithBlock(bar)

我运行程序并没有输出。的为什么吗

我尝试在队列之外打印一些输出,在本应该是主线程,本示例中的全局范围,所以我这样做了:

print("START")

let queue = NSOperationQueue()
queue.addOperationWithBlock(foo)
queue.addOperationWithBlock(bar)

print("END")

输出“喜欢”这个:

START
END
0
1

似乎队列上的操作没有正确执行。主线程是不是在等待队列完成?

1 个答案:

答案 0 :(得分:0)

您没有看到输出,因为在添加到队列的操作有机会完成之前,命令行应用程序正在完成。向NSOperationQueue添加操作的全部目的是在某个其他线程上执行某些任务,通常是为了在启动时耗尽时不阻塞主线程。

理论上你可以等待所有的操作完成(参见waitUntilAllOperationsAreFinished),但是这是一个在命令行测试中有用的模式,但是你几乎不会在Cocoa或Cocoa Touch应用程序中使用(因为我们永远不想阻止那些环境中的主线程。)