gpt4 book ai didi

ios - 如何在同一个全局队列中添加后台任务?

转载 作者:行者123 更新时间:2023-11-29 00:12:24 26 4
gpt4 key购买 nike

我在 iOS 上编写类似于工作线程或后台线程的代码。每次有任务进来,我都会把它放到后台线程中。但问题是,我不想使用这个 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{});每次,因为这会使任务在不同的线程中运行,并且创建一个线程会花费很多时间。

所以我的问题是如何制作一个 GCD 队列并让它在同一个后台线程中运行,当结果出来时我会让它运行回主线程。

最佳答案

您似乎在使用“线程”和“队列”,就像它们是同一件事一样。他们不是。队列是更高级别的抽象,可以使用 1 个或多个实际线程来实现。

使用 dispatch_get_global_queue 很可能每次都会给你一个不同的队列。因此,您需要做的第一件事是创建一个您使用的队列,而不是每次都请求一个新队列。使用 dispatch_queue_create 创建单个队列。在某个适当的范围内存储对此的引用,以便您可以在任何需要的地方引用它。

现在您只有一个队列,您需要决定该队列是并发队列还是串行队列。串行队列只会使用 1 个线程,而并发队列可以使用多个线程。您可以通过将适当的值传递给 dispatch_queue_create 函数的 attr 参数来获得所需的队列。

objective-C :

创建队列:

dispatch_queue_t myQueue = dispatch_queue_create(@"my_global_queue", DISPATCH_QUEUE_CONCURRENT); // or use DISPATCH_QUEUE_SERIAL

使用队列:

dispatch_async(myQueue, ^{
// code
});

swift :

创建队列:

let myQueue = DispatchQueue(label: "my_global_queue") // serial

或:

let myQueue = DispatchQueue(label: "my_global_queue", attributes: .concurrent) // concurrent

使用队列:

myQueue.async {
// code
}

关于ios - 如何在同一个全局队列中添加后台任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46108299/

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