2015-02-05 19 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

相關問題