我想知道在带有GCD的iOS上使用自己的队列/线程的主要规则是什么。
GCD为我们提供:
DispatchQueue.global()
在后台执行代码。还可以使用以下方法创建自己的队列:
DispatchQueue(label: "my own queue")
这里有什么更好的方法或建议?使用GCD的global()
队列还是创建我自己的队列?一个例子:我想用
Network.Framework
做一些网络工作。这是示例1:
let connection = NWConnection(host: "1.2.3.4", port: 40000, using: .udp)
let queue = DispatchQueue(label: "network queue")
connection.start(queue: queue)
这是示例2: let connection = NWConnection(host: "1.2.3.4", port: 40000, using: .udp)
let queue = DispatchQueue.global()
connection.start(queue: queue)
你怎么看? example1 与 example2
最佳答案
此DispatchQueue.global()
是并发队列,这意味着提交到返回队列的任务是相对于彼此并发安排的。
虽然此DispatchQueue(label: "network queue")
是一个串行队列,但提交的任务一个接一个地运行
当您的使用取决于您的情况时,在框架/库中通常使用创建队列的选项来将其工作与您的代码分开,如果您发现自己因使用不堪重负而准备好全局队列,则可以方便地使用它,然后创建一个新的
如果您的示例在每次更改连接时都调用该方法,则您的示例可以这样解释:
print("1")
print("2")
print("3")
使用global
,您将获得 print("1")
print("3")
print("2")
print("3")
print("1")
print("2")
在创建队列时 print("1")
print("2")
print("3")
print("1")
print("2")
print("3")
关于ios - 如何在iOS上使用Dispatch Queue问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63151215/