我定义了一个使用延迟实例化返回串行调度队列的属性,如下所示:
@property (nonatomic, readonly) dispatch_queue_t queue;
- (dispatch_queue_t)queue
{
if (!_queue) {
_queue = dispatch_queue_create("com.example.MyQueue", NULL);
}
return _queue;
}
然后假设我为某个向队列添加块的按钮定义了一个操作方法:
- (IBAction)buttonTapped:(UIButton *)sender
{
dispatch_async(self.queue, ^{
printf("Do some work here.\n");
});
}
实际方法的代码比简单的 print 语句更复杂,但对于示例来说就可以了。
到目前为止,一切都很好。但是,如果我构建并运行程序,我可以点击按钮 10 次并看到块运行,但是当我点击第十一次时,程序会挂起。
如果我将串行队列更改为并发队列,则没有问题。我可以根据需要向队列分派任意数量的块。
知道会发生什么吗?可以发布到串行队列的块数是否有限制?