在viewWillAppear中,长时间运行的任务的GCD模式是什么?

时间:2013-01-02 14:38:28

标签: ios grand-central-dispatch ui-thread

我有一些长时间运行的任务(IE从数据库中检索复杂数据),我需要在我的视图出现时运行。我知道出于性能原因,我想把我长时间运行的任务从主线程中删除。我也知道我必须回到主线程上做任何与UI相关的事情。我试图找出正确的GCD模式来实现这一目标。从我在GCD文档中看到的,这似乎是"对"做事的方式,但我很好奇,如果人们发现另一种模式更有用:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

     // Add long running code for off the UI thread here.  

     dispatch_async(dispatch_get_main_queue(), ^{

          // Add UI updating code here back on the UI thread.

     });
});

我基本上是异步地说(IE不要阻止UI线程)转到一个单独的线程,做一些事情,然后回到主线程并更新UI。

1 个答案:

答案 0 :(得分:1)

你的方法很好。我能看到的唯一缺点是你无法取消长时间运行的操作。这可能导致内存和其他资源拥塞。