gpt4 book ai didi

iphone - 如何在类之间共享串行调度队列?

转载 作者:可可西里 更新时间:2023-11-01 05:38:59 24 4
gpt4 key购买 nike

我注意到它们在创建时不返回指针,而是返回实际对象。所以为了得到一个指针,我试图像这样声明它:

dispatch_queue_t* queue;
*queue = dispatch_queue_create("double_buffer_protection_queue", DISPATCH_QUEUE_SERIAL);

我的 C++ 程序员说这应该可行,但它给出了 BAD_ACCESS 错误,所以我猜我正在以错误的方式接近它。

如果我想要一个可以被我程序中的任何对象访问的串行队列,我该怎么做?我上面显示的代码是为了进入 AppDelegate 类。

最佳答案

来自GCD Reference : typedef struct dispatch_queue_s *dispatch_queue_t;

也许我找错了树,但我的直觉会告诉我一个更惯用的解决方案可能是在类方法中使用 dispatch_once 函数来生成一个队列,多个类实例可以将工作发送到该队列(它不是 C++但你明白了基本的想法):

+ (dispatch_queue_t)sharedQueue
{
static dispatch_once_t pred;
static dispatch_queue_t sharedDispatchQueue;

dispatch_once(&pred, ^{
sharedDispatchQueue = dispatch_queue_create("theSharedQueue", NULL);
});

return sharedDispatchQueue;
}

dispatch_once 确保队列创建在整个运行时只发生一次,因此您可以随时随地安全、廉价地调用 [YourClass sharedQueue] .

然而,我的直觉也会告诉我,在类/对象之间共享队列闻起来有点难闻。如果您只想要一个应用程序范围的队列来提交杂项作业,那么全局队列就足够了吗?如果您想对大量对象做一些密集的工作,我会本能地为它们设置一个单独的队列。也许有更优雅的方式来做你想做的事?

关于iphone - 如何在类之间共享串行调度队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6831852/

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