【问题标题】:Upload the data using Grand Central dispatch queue in iphone?使用 iphone 中的 Grand Central 调度队列上传数据?
【发布时间】:2012-09-17 07:17:05
【问题描述】:

我有很多数据,所以我想像 FIFO 方法一样按 GCD 队列顺序上传数据。该怎么做?

【问题讨论】:

    标签: iphone ios5 upload grand-central-dispatch


    【解决方案1】:

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

    创建队列:

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

    创建队列后,您现在可以分派上传块。 调度队列中的这些块之一:

    dispatch_async(myFifoQueue,myUploadBlock);

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

    例如如果你有一个 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];
          });
    });
    

    【讨论】:

    • 你应该更好地解释你想要做什么。通用问题 ==> 通用答案
    • 我是GCD的新人,请帮助我
    • 我澄清了我的例子。但我建议阅读网络上的 Apple 文档和教程:有很多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-07
    • 1970-01-01
    • 2011-06-04
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多