使用iphone中的Grand Central调度队列上传数据?

时间:2012-09-17 07:17:05

标签: iphone ios5 upload grand-central-dispatch

我有很多数据,所以我想按照FIFO方法上传GCD队列顺序中的数据。怎么做?

1 个答案:

答案 0 :(得分:2)

无论您的“上传”块是什么,您都必须创建一个GCD串行队列,然后在其上调度所有上传块。

创建队列:

dispatch_queue_t myFifoQueue = dispatch_queue_create("com.example.myfifoqueue",DISPATCH_QUEUE_SERIAL);

创建队列后,您现在可以调度上传块。 要在队列中分配其中一个块:

dispatch_async(myFifoQueue,myUploadBlock);

“dispatch_async”保证您的块将被添加到串行队列中,但您当前的线程(通常是主线程)将不会等待块完成。 使用串行队列可确保所有块都按FIFO顺序执行。

E.g。如果您有一个NSArray *myArray并且想要使用名为-(void)processObject:(id)object的方法在队列中处理数组对象,那么您可以用这种方式编写代码:

for(id object in myArray) {
  dispatch_async(myFifoQueue,^{
      [self processObject:object];
  }
  );
}

基本上你在这里做的是枚举数组中的所有对象,然后向串行队列提交一个调用“processObject:”方法的简单块。无论processObject完成任务所花费的时间是什么,dispatch_async将立即返回,并且串行队列将在后台线程中串行处理其块。 请注意,这里没有办法知道所有块何时完成,因此最好在队列末尾提交一些块,通知队列末尾的主线程(这样你就可以了)更新你的用户界面):

dispatch_async(myFifoQueue,^{
dispatch_async(dispatch_get_main_queue(),
     ^{
        [self endOfUpload];
      });
});