dispatch_queue名称和线程

时间:2013-07-06 16:02:59

标签: ios grand-central-dispatch

有一个按钮方法:

-(void) buttonTapped:(id) sender{
    dispatch_async(dispatch_queue_create("countQueue", NULL), ^{
        sleep(10);
        NSLog(@"%d",self.count++);
    });
}

self.count是属性:

@property (nonatomic, assign) int count;

我想通过点击按钮

多次创建“countQueue”
  1. 为了处理countQueue的任务而运行了多少个线程?
  2. 因为块需要在10秒内运行,如果我每2秒点击一次按钮,那么它会创建一个新队列,系统如何处理上一个任务?刚取消它?

1 个答案:

答案 0 :(得分:6)

  • 每次调用dispatch_queue_create()都会创建新队列,即使已存在具有相同标签的队列也是如此。标签仅用作在调试期间识别队列的工具。任意多个具有相同标签的队列可以同时存在。
  • 由于您没有对队列保持强引用,因此在调度到队列的所有块都已完成后会自动销毁它。
  • 系统如何将线程分配给队列是GCD的实现细节。
  • 在您的情况下,使用dispatch_after()可能更容易。

编辑:阅读完评论后,我认为您的问题有更好的解决方案, 如果图像下载实际完成,则更新属性。如何执行此操作取决于下载使用的方法。一个例子是完成处理程序 sendAsynchronousRequest:queue:completionHandler:的{​​{1}}。