【发布时间】:2011-09-13 17:05:56
【问题描述】:
我的 iOS 应用程序上有一个刷新按钮,用于在 GCD 中启动异步调度队列。队列的名称是自定义的。可能存在用户猛按按钮并导致创建大量不必要的队列的问题。我希望检查是否有一个具有特定名称的队列处于活动状态,因此我无法启动另一个队列或添加到同名的同一个队列。
这可能吗?
【问题讨论】:
标签: iphone ios ios4 grand-central-dispatch
我的 iOS 应用程序上有一个刷新按钮,用于在 GCD 中启动异步调度队列。队列的名称是自定义的。可能存在用户猛按按钮并导致创建大量不必要的队列的问题。我希望检查是否有一个具有特定名称的队列处于活动状态,因此我无法启动另一个队列或添加到同名的同一个队列。
这可能吗?
【问题讨论】:
标签: iphone ios ios4 grand-central-dispatch
你可以维护一个添加了对象的可变字典
[dict setobject:<your object> forkey:<the queue name>]
当您发送后续请求时,您可以在该方法中检查以下内容:
object = [dict objectforkey:<queue name>]
if (object == nil)
//send the request
队列操作完成后,从字典中删除键-对象对。
[dict removeobjectforkey: < queue name >
【讨论】:
不,没有方法可以通过名称从系统中获取串行队列。您需要自己拥有串行队列。
【讨论】:
我认为您不应该对每个请求都创建新队列。而且由于您在创建新队列来执行每个块时似乎并不担心它们是连续的,因此我建议您使用全局队列来运行您的块。这两个操作是同义词,因为它们是您生成的调度队列的最终目标队列。获取队列很简单,应该替换您创建自己的队列的代码。
dispatch_queue_t aQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
如果您希望它们按顺序运行,您应该将自己的队列定义为实例变量,以便您只创建一次并在每次需要调度块时使用同一个。
【讨论】: