0

我正在学习 iOS,当谈到 GCD 时,我感到很困惑。让我们把它排除在外,我正在编写一个从互联网获取数据的小程序。这是我的视图控制器

NSMutableArray dataArray = [NSMutableArray array];

[querysomethingwithblock:(^ {
   //do some stuff here
   [otherquerywithblock:( ^ {
       //do some stuff here
       // Here I got the data from internet
       // Do loop action
       [dataArray addObject:data];
   })];


})];
// here I want to perform some actions only after get data from internet
[self performAction:dataArray];

我怎样才能达到这个目的。实际上,[self performAction:dataArray]总是在我得到数据之前被解雇。我试图玩 GCD 但没有运气。

这是我迄今为止尝试过的一些模式

dispatch_async(queue, ^{
    // Do query stuff here
    dispatch_async(dispatch_get_mainqueue(), ^{
       //perform action here
    });
{;

或使用dispatch_group_async, dispatch_group_wait,dispatch_group_notify

我现在可以处理的唯一方法是使用dispatch_after,但关键是下载时间是可变的,在这里有一个特定的时间不是一个好习惯

非常感谢您的任何建议。

4

1 回答 1

1

我假设的代码部分Do query stuff here已经是异步的,为什么要把它放在 dispatch_queue 中呢?

相反,如果您设法进行同步查询,则您的代码(第二个片段)将起作用,因为只有在查询完成后才会执行对主队列的调度。

如果您没有以同步方式执行查询的选项,那么您需要一些机制来注册要在下载完成时执行的块或回调。

归根结底,这完全取决于您在那里有什么样的查询,以及它为您提供了哪些方法来注册下载完成时要执行的操作。

于 2013-09-19T16:01:50.503 回答