2015-02-05 20 views
0

我一直在我的应用程序中使用它来在后台运行代码,但我一直在遇到一些奇怪的性能滞后。有时我实际上需要指定一个大于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, ^{ 
    ... 
}); 
+1

oltman的回答是正确的 - 你不需要创建自己的队列。出于兴趣,你是否摧毁了你的队列? – Tommy 2015-02-05 19:17:27

+0

@Tommy这个当前的项目是用ARC编写的,所以我无法运行'dispatch_release' – Jacksonkr 2015-02-05 19:45:10

回答

3

你有什么应该工作得很好,但清洁版本是低于。作为奖励,我包含了派发回主线程所需的代码(如果您在后台执行一些繁重的工作,并且需要在完成时更新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 
      }); 
     }); 
+0

我怎么能告诉同一个脚本运行后,比如说1秒? – Jacksonkr 2015-02-05 19:21:08

+0

如果你想添加一个延迟,'dispatch_after'就是你想要的。该行看起来像'dispatch_after(dispatch_time(DISPATCH_TIME_NOW,(int64_t)(num_seconds * NSEC_PER_SEC)),dispatch_get_main_queue(),^ {/ * code here * /});' – oltman 2015-02-05 19:22:47

+0

请注意,您需要更改目标如果这是在后台运行的队列。 – oltman 2015-02-05 19:23:47

相关问题