我想弄清楚如何在Objective-C(iOS)中以不會掛起UI線程的方式執行日誌運行任務,有點像背景工作者或TPL 。淨。Objective-C中的長時間運行任務C
我正在尋找一種方式來處理這種工作的可維護方式,這被認爲是iOS開發的最佳實踐?
我想弄清楚如何在Objective-C(iOS)中以不會掛起UI線程的方式執行日誌運行任務,有點像背景工作者或TPL 。淨。Objective-C中的長時間運行任務C
我正在尋找一種方式來處理這種工作的可維護方式,這被認爲是iOS開發的最佳實踐?
有很多方法可以做到這一點,如NSThread
,NSOperation
/NSOperationQueue
類或GCD
。示例代碼(GCD):
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//background work
});
你可以閱讀一下:Concurrency Programming Guide
對於GCD,試試這個測試:(另請參閱蘋果的doc亞當和馬丁r具有建議
- (IBAction)dispatchQPressed:(id)sender
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
for (int i=0; i<1000; i++)
{
NSLog(@"Running in background thread concurrently: %i", i);
}
});
for (int i = 0; i<200; i++)
{
NSLog(@"run in main thread:%i", i);
}
}
+1,儘管NSThread應該是最後的手段.GCD更有效地管理線程管理。 – Abizern 2012-07-21 19:02:44
@Abizern同意。 – Adam 2012-07-21 19:06:57