Dre*_*her 18 grand-central-dispatch ios objective-c-blocks
我阅读了Apple文档,了解如何使用串行队列来确保以可预测的顺序执行任务,但现在我感到困惑太多了.
一些我如何能够连续工作,但我仍然不清楚,所以我需要简单的串行示例,我的方法串行执行.
我将我的功能划分为4个部分,现在希望它们执行Serially
[self ReadAllImagesFromPhotosLibrary];
[self WriteFewImagestoDirectory];
[self GettingBackAllImagesFromFolder];
[self MoveToNextView];
Run Code Online (Sandbox Code Playgroud)
Ben*_*min 42
要跟进并改进iCoder的答案,您可以而且应该做到以下几点.
dispatch_queue_t serialQueue = dispatch_queue_create("com.unique.name.queue", DISPATCH_QUEUE_SERIAL);
dispatch_async(serialQueue, ^{
[self ReadAllImagesFromPhotosLibrary];
});
dispatch_async(serialQueue, ^{
[self WriteFewImagestoDirectory];
});
dispatch_async(serialQueue, ^{
[self GettingBackAllImagesFromFolder];
});
dispatch_async(serialQueue, ^{
[self MoveToNextView];
});
Run Code Online (Sandbox Code Playgroud)
尽管有上述呼吁是异步,他们将被排队并连续运行的DISPATCH_QUEUE_SERIAL状态.同步和异步之间的区别在于,使用sync,您的代码将在运行以下代码之前暂停并等待块响应,因此如果执行时间很长,可能会冻结UI.而使用异步,代码运行,并以异步方式返回块.
但是,由于GCD(Grand Central Dispatch),您存储在DISPATCH_QUEUE_SERIAL中的任务将按照添加顺序依次等待并执行.
dispatch_queue_t serialQueue = dispatch_queue_create("com.unique.name.queue", DISPATCH_QUEUE_SERIAL);
dispatch_async(serialQueue, ^{
[self ReadAllImagesFromPhotosLibrary];
dispatch_async(serialQueue, ^{
[self WriteFewImagestoDirectory];
dispatch_async(serialQueue, ^{
[self GettingBackAllImagesFromFolder];
dispatch_async(serialQueue, ^{
[self MoveToNextView];
});
});
});
});
Run Code Online (Sandbox Code Playgroud)
我认为上面的代码应该可以工作,但要确保UI操作在主线程中执行.希望能帮助到你.
您可以使用NSOperationQueuewithmaxConcurrentOperationCount设置为 1 (甚至为每个 NSOperation 设置依赖项,因此在其依赖项完成之前它不会启动)。
这是NSOperationQueue类参考。
也看看这个问题。
| 归档时间: |
|
| 查看次数: |
16485 次 |
| 最近记录: |