0

有一个按钮方法:

-(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秒点击一次按钮,那么它会创建一个新队列,系统如何处理之前的任务?只是取消它?
4

1 回答 1

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

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

于 2013-07-06T16:23:05.327 回答