这个代码片段对于 运行 背景中的一个块有多好?

How good is this snippet for running a block in the background?

我一直在我的应用程序中使用它在后台 运行 代码,但我 运行 遇到了一些奇怪的性能滞后。有时我实际上需要指定一个大于 0.0 的时间,但通常它需要 运行 NOW

这是最佳做法还是我在为失败做好准备?

dispatch_queue_t dqt = dispatch_queue_create("com.myapp.iphone.fetchRecentContent", NULL);
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.0 * NSEC_PER_SEC), dqt, ^{
    ...
});

您拥有的应该可以正常工作,但下面是一个更简洁的版本。作为奖励,我包含了分派回主线程所需的代码(如果您在后台做一些繁重的工作并且需要在完成后更新 UI,这很常见)。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){
            // background code here
            dispatch_async(dispatch_get_main_queue(), ^(void){
                // UI thread code here
            });
        });