我已經使用GCD之前的dispatch_async
用於背景線程工作單元,比如解析來自網絡請求(例如JSON或XML)的數據,並且它是WONDERFUL。但是如果我有一個後臺任務要運行應用程序的長度呢? dispatch_async
仍然適合這種情況,還是有更好的實施方法?適用於應用程序生命週期任務的GCD dispatch_async?
0
A
回答
3
當然,但創建你自己的調度隊列。 (如果你使用一個全球性的隊列,你可以佔用該隊列 - 或它的一個線程 - 永遠。)
dispatch_queue_t dispatchQueue = dispatch_queue_create("com.mycompany.myapp.ForeverOperation", DISPATCH_QUEUE_SERIAL);
dispatch_async(dispatchQueue, ^{
// worker routine
});
更傳統,你會給這個明確的線索,如果將運行永遠,這可能會更「有意義」。但結果基本相同。
NSThread * myWorkerThread = [[NSThread alloc] initWithTarget:...
[myWorkerThread start];
如果您需要與其他線程/隊列通信,像往常一樣,可能需要標準的同步技術。
1
這真的和dispatch_async
無關,這只是在後臺線程中做某事的一種方法。如果您想在後臺線程中執行某些操作,請在後臺線程中執行此操作!請注意,經常這樣做會拖累你的應用程序,因爲你只有很多處理時間並且只有很多處理器;你最終可能不得不在Instrument中學習。你可能想把自己的任務分解成幾個小塊,並且每隔一段時間以短塊完成。 GCD和NSOperation都可以提供幫助。
相關問題
- 1. ASP.NET應用程序生命週期 - 非頁面生命週期
- 2. iphone應用程序的生命週期?
- 3. 播放應用程序生命週期
- 4. WP7應用程序生命週期
- 5. Tomcat應用程序生命週期
- 6. Ruby Web應用程序生命週期
- 7. Asp.NET Global.asax - 應用程序生命週期
- 8. 應用程序生命週期問題
- 9. 適用於應用生命週期的Android事件監聽器
- 10. 關於CLLocationManager的iOS應用程序生命週期startMonitoringForRegion
- 11. 服務運行時的應用程序類生命週期
- 12. 在應用程序生命週期的早期調用getPackageName()
- 13. Android應用程序生命週期和服務
- 14. Android - 應用程序生命週期服務
- 15. 應用程序和本地服務生命週期
- 16. 使用基於Dialog的MFC應用程序應用寬週期性任務
- 17. .Net CF運行線程用於應用程序的生命週期
- 18. 使用Perl Dancer的應用程序生命週期是什麼?
- 19. dispatch_once每個應用程序的負載或應用程序的生命週期?
- 20. Android應用程序/進程的生命週期?
- 21. Windows服務生命週期和責任
- 22. Android後臺任務和生命週期
- 23. ASP .NET應用程序生命週期+ Singleton實例壽命
- 24. EF代碼第一個用於web應用程序的DBContext生命週期
- 25. 用於.NET開發的免費應用程序生命週期管理工具
- 26. 在Android應用程序中使用生命週期方法
- 27. 在應用程序生命週期中重用InputSource
- 28. 零iAd請求的應用程序的生命週期
- 29. 如何測試我的android應用程序的生命週期?
- 30. Android工作線程和應用程序生命週期
一些家庭作業表明,自定義隊列將默認將其目標隊列設置爲全局默認優先級隊列,這意味着提交給自定義隊列的工作將在全局默認隊列上執行。那麼,無論如何我將在全局執行時創建自定義隊列有什麼優勢? – 2013-03-26 20:08:50