Grand Central Dispatch簡介

Grand Central Dispatch (GCD)是Apple開發的一個多核編程的較新的解決方法。在Mac OS X 10.6雪豹中首次推出,並在最近引入到了iOS4.0。
GCD是一個替代諸如NSThread等技術的很高效和強大的技術。GCD徹底能夠處理諸如數據鎖定和資源泄漏等負責的異步編程問題。
GCD能夠完成不少事情,可是該文僅關注在iOS應用中實現多線程所需的一些基礎知識。
在開始以前,須要理解是要提供給GCD隊列的是代碼塊,用於在系統或者用戶建立的的隊列上調度運行。
聲明一個隊列
以下會返回一個用戶建立的隊列:
dispatch_queue_t myQueue = dispatch_queue_create("com.iphonedevblog.post", NULL);
其中,第一個參數是標識隊列的,第二個參數是用來定義隊列的參數(目前不支持,所以傳入NULL)。
執行一個隊列
以下會異步執行傳入的代碼:
dispatch_async(myQueue, ^{ [self doSomething]; });
其中,首先傳入以前建立的隊列,而後提供由隊列運行的代碼塊。
聲明並執行一個隊列
若是不須要保留要運行的隊列的引用,能夠經過以下代碼實現以前的功能:
dispatch_async(dispatch_queue_create ("com.iphonedevblog.post", NULL), ^{ [self doSomething]; });
暫停一個隊列
若是須要暫停一個隊列,能夠調用以下代碼。暫停一個隊列會阻止和該隊列相關的全部代碼運行。
dispatch_suspend(myQueue);
恢復一個隊列
若是暫停一個隊列不要忘記恢復。暫停和恢復的操做和內存管理中的retain和release相似。調用dispatch_suspend會增長暫停計數,而dispatch_resume則會減小。隊列只有在暫停計數變成零的狀況下才開始運行。dispatch_resume(myQueue);
從隊列中在主線程運行代碼
有些操做沒法在異步隊列運行,所以必須在主線程(每一個應用都有一個)上運行。UI繪圖以及任何對NSNotificationCenter的調用必須在主線程長進行。在另外一個隊列中訪問主線程並運行代碼的示例以下:
dispatch_sync(dispatch_get_main_queue(), ^{ [self dismissLoginWindow]; });
注意,dispatch_suspend (以及dispatch_resume)在主線程上不起做用。
小結
目前咱們已經介紹了GCD能夠作到的一些基礎,在本文中介紹的應該可讓你起步並輕鬆處理多線程。
更多信息,能夠參閱Apple的Grand Central Dispatch Technology Brief 連接.
祝編碼快樂!
Ricky.
以上
 
相關文章
相關標籤/搜索