简单的GCD串行队列示例,例如使用块的FIFO

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中的任务将按照添加顺序依次等待并执行.


iCo*_*der 5

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操作在主线程中执行.希望能帮助到你.


Dmi*_*kov 1

您可以使用NSOperationQueuewithmaxConcurrentOperationCount设置为 1 (甚至为每个 NSOperation 设置依赖项,因此在其依赖项完成之前它不会启动)。

这是NSOperationQueue类参考。

也看看这个问题。