我最近开始在Swift中学习多线程,我想使用NSOperationQueue
和NSOperation
类尝试一些基本的多线程。
在.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
似乎队列上的操作没有正确执行。主线程是不是在等待队列完成?
答案 0 :(得分:0)
您没有看到输出,因为在添加到队列的操作有机会完成之前,命令行应用程序正在完成。向NSOperationQueue
添加操作的全部目的是在某个其他线程上执行某些任务,通常是为了在启动时耗尽时不阻塞主线程。
理论上你可以等待所有的操作完成(参见waitUntilAllOperationsAreFinished),但是这是一个在命令行测试中有用的模式,但是你几乎不会在Cocoa或Cocoa Touch应用程序中使用(因为我们永远不想阻止那些环境中的主线程。)