GCD是apple在iOS 4.0之後引入的新多線程方法,它是基於C語言的擴展,
GCD是在內核級提供多線程管理的,效率較高。
GCD的關鍵之一是隊列,系統提供了一些預定義的隊列,其中包括主線程隊列(該隊列保證在主線程上運行),你也可以定義自己的隊列。
GCD隊列是嚴格的FIFO方式工作的,代碼的開始順序與加入隊列的順序相同。(在多核心系統上,代碼塊的完成順序不一定是FIFO的。但是在目前單核的iPhone上不必在意)。
GCD的另一關鍵是引入了block,類似於其它語言的匿名表達式。block可以為變量賦值,可以當作參數傳遞給函數或方法 ,當然也可以執行。
block可以接受參數也可以返回值。block以^定義。形式上類似於以*定義的函數指針。
執行該block
可以看到block很類似於c時的函數指針。不過block可以以inline方式嵌入代碼。同時block可以訪問上下文中的變量,缺省時block會對訪問的變量進行copy,而不
影響原變量的值。當然可以通過在變量前加 __block修飾符來允許直接改變訪問變量。
當然Block本身在iOS 4.0以後的API中扮演著舉足輕重的角色,很多新增的API都可以接受BLOCK作為參數。
比如,在數據容器中支持Block來進行自定義判斷:
下面看一下線程相關的函數
當有代碼需要在線程中執行時,可以用dispatch_async函數,該函數接受2個參數:隊列和block。隊列可以是系統預定義隊列,也可以是用戶自定義的。而block的威力
則體現在此,可以直接編寫代碼,上下文一目了然。
此處隊列是用dispatch_get_global_queue(0,0)獲得,前一個參數指定隊列優先級,有DISPATCH_QUEUE_PRIORITY_HIGH , DISPATCH_QUEUE_PRIORITY_LOW, DISPATCH_QUEUE_PRIORITY_DEFAULT (即0),後一個參數未使用,請設為0。