GCD補充
有 3 種分派隊列:
Main Queue
這個隊列在主線程上執行它的所有任務,Cocoa 和 Cocoa Touch 允許程序員在主線程上調用一切UI- related 方法。使用 dispatch_get_main_queue 函數檢索到主隊列的句柄。
Concurrent Queues為了執行異步和同步任務,你可以在 GCD 中檢索到這寫隊列。多個並發隊列能夠輕而易舉的並行執行多
個任務,沒有更多的線程管理,酷!使用 dispatch_get_global_queue 函數檢索一個並發隊列的句柄。
Serial Queues
無論你提交同步或者異步任務,這些隊列總是按照先入先出(FIFO)的原則來執行任務,這就意味著它 們一次執行一個 Block Object。然而,他們不在主線程上運行,所以對於那些要按照嚴格順序執行並不阻塞主 線程的任務而言是一個完美的選擇。使用 dispatch_queue_create 函數創建一個串行隊列。一旦你使用完整隊 列,必須使用 dispatch_release 函數釋放它
這兒簡單總結關於 Block Objects 變量你必須了解的特點:
1、局部變量在 Block Objects 和 Objective-C 方法中的工作原理非常相似。
2、對於內聯 Block Objects,局部變臉不僅包含 Block 內部定義的變量,並且包含在 Block Objects 執行方法中定義的變量。
3、你不能參考 self;在 Objective-C 類中運行的獨立 Block Objects,如果你需要訪問 self, 就必須把 Object作為參數傳遞到 BlockObject
4、只有當 self 出現在創建 Block Object 的詞法范圍內,你可以在內聯 Block Object 內參考 self。
5、對於內聯 Block Objects,那些在 BlockObject 執行過程中定義的局部變量是可讀寫的,換句話說,對於Block Objects 自身的局部變量來說,Block Objects 有個讀寫存取。
6、對於內聯 Block Objects,實現 Object 的 Objective-C 方法的局部變量只能從中讀取,不能寫入。不過還有一個例外,如果定義它們通過 __block 存儲類型定義的話,Block Object 可以寫入此類的變
量。
7、假設你有一個類 NSObject 的 Object,並且在這個 Object 的執行中你使用了一個 Block Object 與 GCD相連,那麼在這個 Block Object 內部,你會有一個存儲來讀取那個支持你的 Block 執行的 NSObject內部的聲明屬性。