0

我有一些长时间运行的任务(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。

4

1 回答 1

1

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

于 2013-01-02T14:46:22.000 回答