使用GCD

DomSeevers 13年前發布 | 13K 次閱讀 GCD iOS開發 移動開發

什么是 GCD

Grand Central Dispatch (GCD) 是 Apple 開發的一個多核編程的解決方法。該方法在 Mac OS X 10.6 雪豹中首次推出,并隨后被引入到了 iOS4.0 中。GCD 是一個替代諸如 NSThread, NSOperationQueue, NSInvocationOperation 等技術的很高效和強大的技術。

GCD 和 block 的配合使用,可以方便地進行多線程編程。

應用舉例

讓我們來看一個編程場景。我們要在 iPhone 上做一個下載網頁的功能,該功能非常簡單,就是在 iPhone 上放置一個按鈕,點擊該按鈕時,顯示一個轉動的圓圈,表示正在進行下載,下載完成之后,將內容加載到界面上的一個文本控件中。

不用 GCD 前

雖然功能簡單,但是我們必須把下載過程放到后臺線程中,否則會阻塞 UI 線程顯示。所以,如果不用 GCD, 我們需要寫如下 3 個方法:

  • someClick 方法是點擊按鈕后的代碼,可以看到我們用 NSInvocationOperation 建了一個后臺線程,并且放到 NSOperationQueue 中。后臺線程執行 download 方法。
  • download 方法處理下載網頁的邏輯。下載完成后用 performSelectorOnMainThread 執行 download_completed 方法。
  • download_completed 進行 clear up 的工作,并把下載的內容顯示到文本控件中。

這 3 個方法的代碼如下。可以看到,雖然 開始下載 -> 下載中 -> 下載完成 這 3 個步驟是整個功能的三步。但是它們卻被切分成了 3 塊。他們之間因為是 3 個方法,所以還需要傳遞數據參數。如果是復雜的應用,數據參數很可能就不象本例子中的 NSString 那么簡單了,另外,下載可能放到 Model 的類中來做,而界面的控制放到 View Controller 層來做,這使得本來就分開的代碼變得更加散落。代碼的可讀性大大降低。

  • static NSOperationQueue * queue;

  • sesese色