gpt4 book ai didi

objective-c - 在 GCD 中使用哪个队列

转载 作者:行者123 更新时间:2023-12-02 22:33:07 24 4
gpt4 key购买 nike

我正在使用这段代码:

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);

dispatch_async(queue, ^{

//saving stuff to NSUserDefaults

});

只要代码没有被快速连续调用两次,它就会工作,此时我会崩溃。它所说的只是崩溃的线程 7:跟踪,在 CFRetain 的屏幕中。

我猜我的队列应该不允许重新启动这个例程,除非它已经完成。但是我不确定要更改许多参数中的哪一个。我不需要它是高优先级的,我也不确定它是否需要是全局队列,老实说,线程编程需要一些时间来确定所有这些,所以我希望有人能指出我正确的方向。

最佳答案

全局队列本质上是并发的。当您 dispatch_sync() 到这些队列时,这仅意味着该函数将在 block 执行完毕后返回。它保证该队列上的 block 不会同时运行。

创建串行队列(dispatch_queue_create() 使用 serial 选项)并将您的 block 分派(dispatch)到它上面。注意不要 disptch_sync() 从队列中运行的 block 进入队列;死锁随之而来。

关于objective-c - 在 GCD 中使用哪个队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11882558/

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