gpt4 book ai didi

objective-c - Apple 是否有办法仅在与当前队列不同时将 block 分派(dispatch)到队列?

转载 作者:行者123 更新时间:2023-12-03 17:21:51 25 4
gpt4 key购买 nike

我的方法使用只能从自定义队列访问的变量。有时我从该队列调用我的方法,有时从主队列调用我的方法。

当从自定义队列调用该方法时,我希望同步运行其所有代码,这样就没有调度开销。但是当从主队列调用它时,我想分派(dispatch)到正确的队列。

我很好奇 Cocoa 是否提供了内置的方法来做到这一点。我目前明确检查正确的队列,如下所示:

static const char * CustomDispatchQueueKey = "com.example.custom";

- (instancetype)init
{
...
_queue = dispatch_queue_create(CustomDispatchQueueKey, DISPATCH_QUEUE_SERIAL);
dispatch_queue_set_specific(_queue, CustomDispatchQueueKey, (void *)CustomDispatchQueueKey, NULL);
dispatch_set_target_queue(_queue, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0));
...
}

- (void)customTask
{
BOOL onCustomQueue = dispatch_get_specific(CustomDispatchQueueKey) == CustomDispatchQueueKey;
void (^block)() = ^{
// access data that needs to be accessed from the custom queue
};
if (onCustomQueue) {
block();
} else {
dispatch_async(_queue, block);
}
}

Apple 有更好的方法来做到这一点吗?

最佳答案

您可以查看dispatch_get_current_queue()反对dispatch_get_main_queue()

if (dispatch_get_current_queue() == dispatch_get_main_queue()) {
// Main queue
} else if (dispatch_get_current_queue() == _queue) {
// Your custom queue
} else {
// Another queue
}

您还可以使用+[NSThread isMainThread]如果你也喜欢的话。

关于objective-c - Apple 是否有办法仅在与当前队列不同时将 block 分派(dispatch)到队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23040739/

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