Iphone 如何确定当前正在运行的异步GCD调度队列

Iphone 如何确定当前正在运行的异步GCD调度队列,iphone,ios,ios4,grand-central-dispatch,Iphone,Ios,Ios4,Grand Central Dispatch,我的iOS应用程序上有一个刷新按钮,它在GCD中启动一个异步调度队列。队列的名称是自定义的。可能会出现这样的问题:用户按下按钮,导致创建大量不必要的队列。我希望检查是否有一个具有特定名称的队列处于活动状态,以便我无法启动另一个队列或添加到具有相同名称的同一队列 这是可能的吗?您可以维护一个添加了对象的可变字典 [dict setobject:<your object> forkey:<the queue name>] [dict setobject:forkey:]

我的iOS应用程序上有一个刷新按钮,它在GCD中启动一个异步调度队列。队列的名称是自定义的。可能会出现这样的问题:用户按下按钮,导致创建大量不必要的队列。我希望检查是否有一个具有特定名称的队列处于活动状态,以便我无法启动另一个队列或添加到具有相同名称的同一队列


这是可能的吗?

您可以维护一个添加了对象的可变字典

[dict setobject:<your object> forkey:<the queue name>]
[dict setobject:forkey:]
当您发送后续请求时,您可以在方法中检查以下内容:

object = [dict objectforkey:<queue name>]

if (object == nil)
//send the request
object=[dict objectforkey:]
if(object==nil)
//发送请求
队列操作完成后,从字典中删除密钥对象对

[dict removeobjectforkey: < queue name >
[dict removeobjectforkey:

不,没有按名称从系统中获取串行队列的方法。您需要自己拥有串行队列。

我认为您不应该在每个请求上创建新队列。而且,在创建新队列以执行每个块时,您似乎并不担心它们是顺序的,因此我建议您不要使用全局队列o运行您的块。这两个操作都是同义的,因为它们是您生成的调度队列的最终目标队列。获取队列很简单,应该替换您创建自己队列的代码

dispatch_queue_t aQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
如果希望它们按顺序运行,则应将自己的队列定义为实例变量,以便只创建一次队列,并在每次需要分派块时使用相同的队列