2011-06-13 29 views
0

我的iOS应用程序上有一个刷新按钮,它启动GCD中的异步调度队列。队列的名称是自定义的。用户可能会遇到这样的问题,即用户将按钮敲出来并导致大量不必要的队列被创建。我希望检查是否有一个特定名称的队列处于活动状态,因此我无法启动另一个队列或添加到相同名称的同一队列中。如何确定当前正在运行的异步GCD调度队列

这可能吗?

回答

0

那么就可以保持一个可变的字典的对象添加

[dict setobject:<your object> forkey:<the queue name>] 

当发送后续请求则在该方法可以检查以下内容:

object = [dict objectforkey:<queue name>] 

if (object == nil) 
//send the request 

当队列操作完成从字典中删除键对象对。

[dict removeobjectforkey: < queue name > 
0

不,没有办法通过名称从系统获取串行队列。你需要自己拥有串行队列。

2

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

dispatch_queue_t aQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 

如果你希望它们按顺序运行,您应该定义自己的队列作为一个实例变量,让你创建它只有一次,使用同一个每次你需要派遣一个块的时间。

相关问题