Spa*_*Dog 24 iphone objective-c grand-central-dispatch ios
好的,我喜欢Grand Central Dispatch并且在使用它之后相对成功,但这是我不完全理解的.
假设我已经创建了自己的串行队列
dispatch_queue_t myQueue;
myQueue = dispatch_queue_create("myQueue", NULL);
Run Code Online (Sandbox Code Playgroud)
之后我这样做:
dispatch_async(myQueue, ^{
[self doStuff1];
});
// and a few lines later...
dispatch_sync(myQueue, ^{
[self doStuff2];
});
Run Code Online (Sandbox Code Playgroud)
第一个调度是异步的.那么,它将同时完成,对吧?如果myQueue是串行的怎么办?串行队列如何并行执行,或者如果不按顺序执行?
谢谢
bbu*_*bum 58
dispatch_async()表示该块已入dispatch_async()队并返回以在执行该块之前将另一个任务/块(可能)排入队列.
使用时dispatch_sync(),该块将入队,并且该函数将不会继续将另一个任务/块排入队列,直到执行该块为止.
这些块仍然是串行执行的.你可以执行100个dispatch_async()调用,每个调用都有一个睡眠时间为100秒的块,而且它真的很快.通过调用dispatch_sync()相同的串行队列来执行此操作,并在dispatch_sync()10,000秒后返回.
更简单地说:
dispatch_async(serialQ, block1);
dispatch_async(serialQ, block2);
dispatch_sync(serialQ, block3);
Run Code Online (Sandbox Code Playgroud)
block1将在之前block2执行之前执行block3.这是串行队列保证的顺序.
但是,调用dispatch_async()可能会在任何块开始执行之前返回.在dispatch_sync()将不被执行所有三个块之前恢复!
| 归档时间: |
|
| 查看次数: |
11380 次 |
| 最近记录: |