gpt4 book ai didi

swift - NSOperationQueue 没有完成操作?

转载 作者:行者123 更新时间:2023-11-30 13:08:23 28 4
gpt4 key购买 nike

我最近开始学习 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

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

最佳答案

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

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

关于swift - NSOperationQueue 没有完成操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39067785/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com