Objective c 如何使主线程等待某些异步操作完成?

Objective c 如何使主线程等待某些异步操作完成?,objective-c,ios,multithreading,uitableview,asynchronous,Objective C,Ios,Multithreading,Uitableview,Asynchronous,我有UITableView和一些内容,它们是以异步方式加载的。当用户旋转设备时,我需要在-willRotateToInterfaceOrientation方法中进行[tableView重载数据]。在我的例子中,重载数据是异步工作的 我知道重载数据在主线程中工作,但它触发CellForRowatineXpath,在我的例子中,它是异步工作的。 因此,问题是如何使主线程等待,直到UITableView的重载数据结束。如果从willRotateToInterfaceOrientation调用重载数据,

我有
UITableView
和一些内容,它们是以异步方式加载的。当用户旋转设备时,我需要在
-willRotateToInterfaceOrientation
方法中进行
[tableView重载数据]
。在我的例子中,重载数据是异步工作的

我知道重载数据在主线程中工作,但它触发CellForRowatineXpath,在我的例子中,它是异步工作的。


因此,问题是如何使主线程等待,直到UITableView的重载数据结束。

如果从willRotateToInterfaceOrientation调用重载数据,那么它将在主线程上调用。事实上,UIView不是线程安全的,应该只从主线程处理(以防出于某种原因有人想到从另一个线程调用重载数据)

我认为“异步”作为一个术语存在混淆。在主线程上调用诸如willRotateToInterfaceOrientation之类的UI委托的异步回调。异步并不一定意味着一个不同的线程(尽管异步“并行”运行确实如此)

我建议您阅读有关nsrunlop的Apple文档。它是iOS应用程序运行方式不可或缺的一部分,也是应用程序程序员必须了解的内容

您可以使用
使主线程等待UITableView数据重新加载。重新加载数据后,调用as参数的传递结果

您需要在后台加载表的数据,然后调用UITableView的reloadData方法

您可以使用GCD轻松地将加载函数异步分派到后台队列。该任务完成后,让工作线程将调用
[tableView reloadData]
的块分派回主线程。以下是方法:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{

  ...
  dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
  dispatch_async(queue, ^{

     // load your table data here
     [self loadMyTableData];

     // when done dispatch back to the main queue to load the table
     dispatch_queue_t mainQueue = dispatch_get_main_queue();
     dispatch_async(mainQueue, ^{

        [self.tableView reloadData];
      });
  });
  ...
}

我知道重载数据是在主线程中调用的。但是realodData调用CellForRowatineXpath。。。这个方法需要异步加载一些数据。我明白了,所以你不是在等待重载数据完成,而是等待重载数据触发的异步任务完成。您能否修改您的问题以反映这一点?nsrunlop仍然是您想要的,尽管我不理解为什么在异步数据加载时您要将主线程作为人质。A需要主线程等待重新加载数据,因为这将使旋转动画变得愉快。很抱歉,George,该语句没有告诉我任何有助于您的信息。也许可以确定您试图解决的问题,并用代码示例加以说明,以便我们能够跟踪您并提出解决方案。虽然等待主线程可能会起作用,但您正在陈述您希望我们帮助您实现的解决方案,而不需要识别问题。如果我们可以首先评估问题,SO的用户通常可以帮助确定解决方案以及实施所需的内容。谢谢,我在阅读文档时看到了这一点。我会尽力去理解。使[自我加载MyTableData];我需要更改一半代码来存储数据,然后将其推送到子类uitableviewcells及其内容