gpt4 book ai didi

ios - 重用dispatch_get_main_queue()/dispatch_get_global_queue()的结果是否安全?

转载 作者:行者123 更新时间:2023-12-01 20:24:30 26 4
gpt4 key购买 nike

我有这个简单的异步代码。

class MyClass {
func myFunc() {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
// some background work
dispatch_async(dispatch_get_main_queue()) {
// foreground work
}
}
}
}

我想知道,我们可以这样重写吗?
let background_queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
let main_queue = dispatch_get_main_queue()

class MyClass {
func myFunc() {
dispatch_async(background_queue) {
// some background work
dispatch_async(main_queue) {
// foreground work
}
}
}
}

声明(惰性)用于缓存 dispatch_get_global_queue()dispatch_get_main_queue()结果的全局变量,然后重新使用它们。

显然,它可以按预期工作,但是由于我见过的所有代码都使用 dispatch_async(dispatch_get_???_queue(惯用语,因此我认为这可能不安全吗?

我想知道的是: 是否保证安全?

最佳答案

是。给定优先级的dispatch_get_main_queue()dispatch_get_global_queue()将始终返回相同的队列。您可以自由保存这些值以方便使用。在使用时立即调用dispatch_get_???_queue是很常见的,但实际上并不是一个习惯用法。经常没有任何理由创建一个额外的变量。

dispatch_get_main_queue()的文档中:

返回与应用程序的主线程关联的串行调度队列。

正是其中之一。

dispatch_get_global_queue()的文档中:

返回具有指定服务质量类的系统定义的全局并发队列。

从技术上讲,这并不保证每个级别上都只有一个队列(尽管有),但是对于全局队列而言,这无关紧要(因为您无法修改它们)。这些队列在程序的整个运行过程中确实存在。

关于ios - 重用dispatch_get_main_queue()/dispatch_get_global_queue()的结果是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26242864/

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