我有一些长时间运行的任务(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。
答案 0 :(得分:1)
你的方法很好。我能看到的唯一缺点是你无法取消长时间运行的操作。这可能导致内存和其他资源拥塞。