gpt4 book ai didi

ios - 使用 dispatch_async,使用你自己的单独队列还是你自己的全局队列?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:57:53 25 4
gpt4 key购买 nike

所以当使用 dispatch_async ...

例如,假设您正在建立网络连接...

dispatch_queue_t otherQ = dispatch_queue_create(NULL, 0);

__weak MyClass *myself = self;
dispatch_async(otherQ,
^{
myself.searchResultsRA = [myself dataFrom:happyUrl ifError:nil];
dispatch_async(dispatch_get_main_queue(), ^{ if (after) after(); });
});

dispatch_release(otherQ);

请注意,我正在为该调用“就在那里”创建一个队列。

因此,应用中的每个调用都只是“当场”创建自己的队列以供使用。

或者,您可以只为您的应用程序创建一个全局队列,并保留它,并始终使用同一个队列。 (我想,你真的“永远不会释放它”,它只会在应用程序的整个生命周期内持续存在。)

(注意 - 我不是在谈论 Apple 的“全局队列”..dispatch_get_global_queue ..与此无关..我只是说您可以创建自己的队列并始终使用同一个队列。)

我从来没有真正理解过一种方法是否是首选,或者是否存在与这两种方法或任何其他问题相关的危险。

简而言之,使用哪种方法?

最佳答案

这些替代方案完成了截然不同的事情。如果每次都创建一个新队列,那么它们都可以同时运行。如果你总是使用相同的(串行的;不适用于并发的)队列,它上面的 block 将按顺序一次运行一个。

您通常会在两种情况之一中使用后者:

  • 保护非线程安全的东西不被多个线程同时使用(串行队列的最常见用法)

  • 有意减少应用中的并发量以节省资源(无论是内存、服务器连接还是其他资源)。

关于ios - 使用 dispatch_async,使用你自己的单独队列还是你自己的全局队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26093602/

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